@@ -17,10 +17,27 @@ public class DateTimeRange : IRandomizerPlugin<DateTime>, IRandomizerPlugin<Date
1717 /// </summary>
1818 private readonly DateTime latestDate ;
1919
20+ /// <summary>
21+ /// The target timezone to generate only valid date times
22+ /// </summary>
23+ private readonly TimeZoneInfo timeZoneInfo ;
24+
2025 /// <summary>
2126 /// Initializes a new instance of the <see cref="DateTimeRange"/> class.
2227 /// </summary>
2328 public DateTimeRange ( )
29+ : this ( TimeZoneInfo . Local )
30+ {
31+ }
32+
33+ /// <summary>
34+ /// Initializes a new instance of the <see cref="DateTimeRange"/> class.
35+ /// </summary>
36+ /// <param name="timeZoneInfo">
37+ /// The target timezone to generate only valid date times
38+ /// </param>
39+ public DateTimeRange ( TimeZoneInfo timeZoneInfo )
40+ : this ( DateTime . MinValue , timeZoneInfo )
2441 {
2542 }
2643
@@ -31,10 +48,26 @@ public DateTimeRange()
3148 /// The earliest date.
3249 /// </param>
3350 public DateTimeRange ( DateTime earliestDate )
34- : this ( earliestDate , DateTime . Now )
51+ : this ( earliestDate , TimeZoneInfo . Local )
52+ {
53+ }
54+
55+ /// <summary>
56+ /// Initializes a new instance of the <see cref="DateTimeRange"/> class.
57+ /// </summary>
58+ /// <param name="earliestDate">
59+ /// The earliest date.
60+ /// </param>
61+ /// <param name="timeZoneInfo">
62+ /// The target timezone to generate only valid date times
63+ /// </param>
64+ public DateTimeRange ( DateTime earliestDate , TimeZoneInfo timeZoneInfo )
65+ : this ( earliestDate , DateTime . Now , timeZoneInfo )
3566 {
67+
3668 }
3769
70+
3871 /// <summary>
3972 /// Initializes a new instance of the <see cref="DateTimeRange"/> class.
4073 /// </summary>
@@ -45,7 +78,26 @@ public DateTimeRange(DateTime earliestDate)
4578 /// The latest date.
4679 /// </param>
4780 public DateTimeRange ( DateTime earliestDate , DateTime latestDate )
81+ : this ( earliestDate , latestDate , TimeZoneInfo . Local )
82+ {
83+
84+ }
85+
86+ /// <summary>
87+ /// Initializes a new instance of the <see cref="DateTimeRange"/> class.
88+ /// </summary>
89+ /// <param name="earliestDate">
90+ /// The earliest date.
91+ /// </param>
92+ /// <param name="latestDate">
93+ /// The latest date.
94+ /// </param>
95+ /// <param name="timeZoneInfo">
96+ /// The target timezone to generate only valid date times
97+ /// </param>
98+ public DateTimeRange ( DateTime earliestDate , DateTime latestDate , TimeZoneInfo timeZoneInfo )
4899 {
100+ this . timeZoneInfo = timeZoneInfo ;
49101 if ( earliestDate > latestDate )
50102 {
51103 this . latestDate = earliestDate ;
@@ -73,7 +125,10 @@ public DateTime GetValue()
73125
74126 var diff = Random . NextLong ( 0 , timeSpan . Ticks ) ;
75127
76- return this . latestDate . AddTicks ( diff * - 1 ) ;
128+ var generatedDate = this . latestDate . AddTicks ( diff * - 1 ) ;
129+ return this . timeZoneInfo . IsInvalidTime ( generatedDate )
130+ ? GetValue ( )
131+ : generatedDate ;
77132 }
78133
79134 /// <summary>
0 commit comments