@@ -44,6 +44,7 @@ public void SetUp()
4444 DepartureDateLocal = departureDateLocal ,
4545 DepartureDateOffset = new DateTimeOffset ( 2013 , 1 , 21 , 0 , 0 , 0 , _timeSpanOffset ) ,
4646 DepartureDateOffsetZero = new DateTimeOffset ( 2013 , 1 , 21 , 0 , 0 , 0 , TimeSpan . Zero ) ,
47+ DepartureDateOffsetNonLocal = new DateTimeOffset ( 2013 , 1 , 21 , 0 , 0 , 0 , TimeSpan . FromHours ( - 6.25 ) ) ,
4748 } ;
4849
4950 _offset = string . Format ( "{0}:{1}" ,
@@ -69,6 +70,7 @@ public void RoundTripKind()
6970 ""DepartureDateLocal"": ""2013-01-21T00:00:00" + _offset + @""",
7071 ""DepartureDateOffset"": ""2013-01-21T00:00:00" + _offset + @""",
7172 ""DepartureDateOffsetZero"": ""2013-01-21T00:00:00+00:00"",
73+ ""DepartureDateOffsetNonLocal"": ""2013-01-21T00:00:00-06:15""
7274 }" ;
7375 jsonWithRoundtripTimeZone . JsonEquals ( expected ) . Should ( ) . BeTrue ( "{0}" , jsonWithRoundtripTimeZone ) ;
7476
@@ -80,6 +82,7 @@ public void RoundTripKind()
8082 flight . DepartureDateUtc . Kind . Should ( ) . Be ( _flight . DepartureDateUtc . Kind ) ;
8183 flight . DepartureDateOffset . Offset . Should ( ) . Be ( _flight . DepartureDateOffset . Offset ) ;
8284 flight . DepartureDateOffsetZero . Offset . Should ( ) . Be ( _flight . DepartureDateOffsetZero . Offset ) ;
85+ flight . DepartureDateOffsetNonLocal . Offset . Should ( ) . Be ( _flight . DepartureDateOffsetNonLocal . Offset ) ;
8386 }
8487
8588 /// <remarks>
@@ -94,9 +97,8 @@ public void Utc()
9497 {
9598 var dateTimeZoneHandling = DateTimeZoneHandling . Utc ;
9699 var dateTimeKind = DateTimeKind . Utc ;
97-
98- var departureDateLocal = _flight . DepartureDateUtc . Subtract ( _timeSpanOffset ) ;
99- var depatureDateLocalString = departureDateLocal . ToString ( "yyyy-MM-ddTHH:mm:ssZ" ) ;
100+ var departureDateLocalInUtc = TimeZoneInfo . ConvertTimeToUtc ( _flight . DepartureDateLocal , TimeZoneInfo . Local ) ;
101+ var depatureDateLocalString = departureDateLocalInUtc . ToString ( "yyyy-MM-ddTHH:mm:ssZ" ) ;
100102
101103 var jsonWithUtcTimeZone = this . SerializeUsing ( _flight , dateTimeZoneHandling ) ;
102104 var expected = @" {
@@ -105,6 +107,7 @@ public void Utc()
105107 ""DepartureDateLocal"": """ + depatureDateLocalString + @""",
106108 ""DepartureDateOffset"": ""2013-01-21T00:00:00" + _offset + @""",
107109 ""DepartureDateOffsetZero"": ""2013-01-21T00:00:00+00:00"",
110+ ""DepartureDateOffsetNonLocal"": ""2013-01-21T00:00:00-06:15""
108111 }" ;
109112 jsonWithUtcTimeZone . JsonEquals ( expected ) . Should ( ) . BeTrue ( "{0}" , jsonWithUtcTimeZone ) ;
110113
@@ -115,7 +118,7 @@ public void Utc()
115118
116119 // The deserialized local will be the UTC DateTime + the local timezone offset,
117120 // AND with a DateTimeKind of UTC when deserialized.
118- flight . DepartureDateLocal . Should ( ) . Be ( departureDateLocal ) ;
121+ flight . DepartureDateLocal . Should ( ) . Be ( departureDateLocalInUtc ) ;
119122 flight . DepartureDateLocal . Kind . Should ( ) . Be ( dateTimeKind ) ;
120123
121124 flight . DepartureDateUtc . Should ( ) . Be ( _flight . DepartureDateUtc ) ;
@@ -126,6 +129,9 @@ public void Utc()
126129
127130 flight . DepartureDateOffsetZero . Should ( ) . Be ( _flight . DepartureDateOffsetZero ) ;
128131 flight . DepartureDateOffsetZero . Offset . Should ( ) . Be ( _flight . DepartureDateOffsetZero . Offset ) ;
132+
133+ flight . DepartureDateOffsetNonLocal . Should ( ) . Be ( _flight . DepartureDateOffsetNonLocal ) ;
134+ flight . DepartureDateOffsetNonLocal . Offset . Should ( ) . Be ( _flight . DepartureDateOffsetNonLocal . Offset ) ;
129135 }
130136
131137 /// <remarks>
@@ -144,6 +150,7 @@ public void Unspecified()
144150 ""DepartureDateLocal"": ""2013-01-21T00:00:00"",
145151 ""DepartureDateOffset"": ""2013-01-21T00:00:00" + _offset + @""",
146152 ""DepartureDateOffsetZero"": ""2013-01-21T00:00:00+00:00"",
153+ ""DepartureDateOffsetNonLocal"": ""2013-01-21T00:00:00-06:15""
147154 }" ;
148155 jsonWithUnspecifiedTimeZone . JsonEquals ( expected ) . Should ( ) . BeTrue ( "{0}" , jsonWithUnspecifiedTimeZone ) ;
149156
@@ -155,6 +162,7 @@ public void Unspecified()
155162 flight . DepartureDateUtc . Kind . Should ( ) . Be ( dateTimeKind ) ;
156163 flight . DepartureDateOffset . Offset . Should ( ) . Be ( _flight . DepartureDateOffset . Offset ) ;
157164 flight . DepartureDateOffsetZero . Offset . Should ( ) . Be ( _flight . DepartureDateOffsetZero . Offset ) ;
165+ flight . DepartureDateOffsetNonLocal . Offset . Should ( ) . Be ( _flight . DepartureDateOffsetNonLocal . Offset ) ;
158166 }
159167
160168 /// <remarks>
@@ -169,8 +177,8 @@ public void Local()
169177 var dateTimeKind = DateTimeKind . Local ;
170178
171179 var jsonWithLocalTimeZone = this . SerializeUsing ( _flight , dateTimeZoneHandling ) ;
172- var departureDateLocal = _flight . DepartureDateUtc . Add ( _timeSpanOffset ) ;
173- var depatureDateLocalString = departureDateLocal . ToString ( "yyyy-MM-ddTHH:mm:ss" ) ;
180+ var departureDateUtcInLocal = TimeZoneInfo . ConvertTimeFromUtc ( _flight . DepartureDateUtc , TimeZoneInfo . Local ) ;
181+ var depatureDateLocalString = departureDateUtcInLocal . ToString ( "yyyy-MM-ddTHH:mm:ss" ) ;
174182
175183 var expected = @"
176184 {
@@ -179,6 +187,7 @@ public void Local()
179187 ""DepartureDateLocal"": ""2013-01-21T00:00:00" + _offset + @""",
180188 ""DepartureDateOffset"": ""2013-01-21T00:00:00" + _offset + @""",
181189 ""DepartureDateOffsetZero"": ""2013-01-21T00:00:00+00:00"",
190+ ""DepartureDateOffsetNonLocal"": ""2013-01-21T00:00:00-06:15""
182191 }" ;
183192 jsonWithLocalTimeZone . JsonEquals ( expected ) . Should ( ) . BeTrue ( "{0}" , jsonWithLocalTimeZone ) ;
184193
@@ -197,14 +206,17 @@ public void Local()
197206 //
198207 // Calling .ToUniversalTime() will return DepartureDateUtc with correct
199208 // UTC datetime and DateTimeKind.Utc
200- flight . DepartureDateUtc . Should ( ) . Be ( departureDateLocal ) ;
209+ flight . DepartureDateUtc . Should ( ) . Be ( departureDateUtcInLocal ) ;
201210 flight . DepartureDateUtc . Kind . Should ( ) . Be ( dateTimeKind ) ;
202211
203212 flight . DepartureDateOffset . Should ( ) . Be ( _flight . DepartureDateOffset ) ;
204213 flight . DepartureDateOffset . Offset . Should ( ) . Be ( _flight . DepartureDateOffset . Offset ) ;
205214
206215 flight . DepartureDateOffsetZero . Should ( ) . Be ( _flight . DepartureDateOffsetZero ) ;
207216 flight . DepartureDateOffsetZero . Offset . Should ( ) . Be ( _flight . DepartureDateOffsetZero . Offset ) ;
217+
218+ flight . DepartureDateOffsetNonLocal . Should ( ) . Be ( _flight . DepartureDateOffsetNonLocal ) ;
219+ flight . DepartureDateOffsetNonLocal . Offset . Should ( ) . Be ( _flight . DepartureDateOffsetNonLocal . Offset ) ;
208220 }
209221
210222 private string SerializeUsing ( Flight flight , DateTimeZoneHandling handling )
@@ -215,7 +227,6 @@ private string SerializeUsing(Flight flight, DateTimeZoneHandling handling)
215227 . SetDefaultPropertyNameInferrer ( p => p )
216228 . SetJsonSerializerSettingsModifier ( s =>
217229 {
218- s . DateFormatHandling = DateFormatHandling . IsoDateFormat ;
219230 s . DateTimeZoneHandling = handling ;
220231 s . Formatting = Formatting . Indented ;
221232 s . ContractResolver = new DefaultDateTimeContractResolver ( settings ) ;
@@ -230,7 +241,6 @@ private Flight DeserializeUsing(string json, DateTimeZoneHandling handling)
230241 . SetDefaultPropertyNameInferrer ( p => p )
231242 . SetJsonSerializerSettingsModifier ( s =>
232243 {
233- s . DateFormatHandling = DateFormatHandling . IsoDateFormat ;
234244 s . DateTimeZoneHandling = handling ;
235245 } ) ;
236246 var client = new ElasticClient ( settings ) ;
0 commit comments