public class DemoTimeProvider() : TimeProvider
public override TimeZoneInfo LocalTimeZone { get; } = TimeZoneInfo.FindSystemTimeZoneById("Australia/Melbourne");
public override DateTimeOffset GetUtcNow() => DateTimeOffset.FromUnixTimeSeconds(1734711552);
public class DateTimeWithTimeZone
private readonly TimeProvider timeProvider;
private readonly DateTimeOffset localDateTimeWithOffset;
public DateTimeWithTimeZone(TimeProvider timeProvider)
this.timeProvider = timeProvider;
this.localDateTimeWithOffset = timeProvider.GetLocalNow();
public DateOnly GetLocalDay()
return DateOnly.FromDateTime(this.localDateTimeWithOffset.DateTime);
public static void Main()
DemoTimeProvider demoTimeProvider = new();
Console.WriteLine($"fake date in UTC is {demoTimeProvider.GetUtcNow()}");
DateTimeWithTimeZone trialTime = new(demoTimeProvider);
Console.WriteLine($"meaning fake day in Melbourne is {trialTime.GetLocalDay()}");