@@ -24,6 +24,7 @@ public class ManualTimeProvider : TimeProvider
24
24
25
25
private readonly List < ManualTimerScheduledCallback > futureCallbacks = new ( ) ;
26
26
private DateTimeOffset utcNow ;
27
+ private TimeZoneInfo localTimeZone = TimeZoneInfo . Utc ;
27
28
28
29
/// <summary>
29
30
/// Gets the frequency of <see cref="GetTimestamp"/> of high-frequency value per second.
@@ -34,14 +35,21 @@ public class ManualTimeProvider : TimeProvider
34
35
/// </remarks>
35
36
public override long TimestampFrequency { get ; } = 10_000_000 ;
36
37
38
+ /// <inheritdoc />
39
+ public override TimeZoneInfo LocalTimeZone => localTimeZone ;
40
+
37
41
/// <summary>
38
42
/// Creates an instance of the <see cref="ManualTimeProvider"/> with
39
43
/// <see cref="DateTimeOffset.UtcNow"/> being the initial value returned by <see cref="GetUtcNow()"/>.
40
44
/// </summary>
41
45
public ManualTimeProvider ( )
42
46
: this ( System . GetUtcNow ( ) )
47
+ /// <param name="localTimeZone">Optional local time zone to use during testing. Defaults to <see cref="TimeZoneInfo.Utc"/>.</param>
48
+ public ManualTimeProvider ( TimeZoneInfo ? localTimeZone = null )
49
+ : this ( Epoch )
43
50
{
44
51
52
+ this . localTimeZone = localTimeZone ?? TimeZoneInfo . Utc ;
45
53
}
46
54
47
55
/// <summary>
@@ -54,6 +62,18 @@ public ManualTimeProvider(DateTimeOffset startDateTime)
54
62
utcNow = startDateTime ;
55
63
}
56
64
65
+ /// <summary>
66
+ /// Creates an instance of the <see cref="ManualTimeProvider"/> with
67
+ /// <paramref name="startDateTime"/> being the initial value returned by <see cref="GetUtcNow()"/>.
68
+ /// </summary>
69
+ /// <param name="startDateTime">The initial date and time <see cref="GetUtcNow()"/> will return.</param>
70
+ /// <param name="localTimeZone">Optional local time zone to use during testing. Defaults to <see cref="TimeZoneInfo.Utc"/>.</param>
71
+ public ManualTimeProvider ( DateTimeOffset startDateTime , TimeZoneInfo ? localTimeZone = null )
72
+ {
73
+ utcNow = startDateTime ;
74
+ this . localTimeZone = localTimeZone ?? TimeZoneInfo . Utc ;
75
+ }
76
+
57
77
/// <summary>
58
78
/// Gets the current high-frequency value designed to measure small time intervals with high accuracy in the timer mechanism.
59
79
/// </summary>
@@ -128,6 +148,15 @@ public void ForwardTime(TimeSpan delta)
128
148
SetUtcNow ( utcNow + delta ) ;
129
149
}
130
150
151
+ /// <summary>
152
+ /// Sets the local time zone.
153
+ /// </summary>
154
+ /// <param name="localTimeZone">The local time zone.</param>
155
+ public void SetLocalTimeZone ( TimeZoneInfo localTimeZone )
156
+ {
157
+ this . localTimeZone = localTimeZone ;
158
+ }
159
+
131
160
/// <summary>
132
161
/// Advance the date and time represented by <see cref="GetUtcNow()"/>
133
162
/// by the specified <paramref name="delta"/>, and triggers any
0 commit comments