@@ -30,9 +30,9 @@ public static class DateTimeSerializer
30
30
public const string XsdDateTimeFormat3F = "yyyy-MM-ddTHH:mm:ss.fffZ" ; //25
31
31
public const string XsdDateTimeFormatSeconds = "yyyy-MM-ddTHH:mm:ssZ" ; //21
32
32
public const string DateTimeFormatSecondsUtcOffset = "yyyy-MM-ddTHH:mm:sszzz" ; //22
33
- public const string DateTimeFormatSecondsNoOffset = "yyyy-MM-ddTHH:mm:ss" ;
33
+ public const string DateTimeFormatSecondsNoOffset = "yyyy-MM-ddTHH:mm:ss" ;
34
34
public const string DateTimeFormatTicksUtcOffset = "yyyy-MM-ddTHH:mm:ss.fffffffzzz" ; //30
35
- public const string DateTimeFormatTicksNoUtcOffset = "yyyy-MM-ddTHH:mm:ss.fffffff" ;
35
+ public const string DateTimeFormatTicksNoUtcOffset = "yyyy-MM-ddTHH:mm:ss.fffffff" ;
36
36
37
37
public const string EscapedWcfJsonPrefix = "\\ /Date(" ;
38
38
public const string EscapedWcfJsonSuffix = ")\\ /" ;
@@ -56,14 +56,11 @@ public static class DateTimeSerializer
56
56
public static DateTime Prepare ( this DateTime dateTime , bool parsedAsUtc = false )
57
57
{
58
58
if ( JsConfig . SkipDateTimeConversion )
59
- {
60
59
return dateTime ;
61
- }
60
+
62
61
if ( JsConfig . AlwaysUseUtc )
63
- {
64
62
return dateTime . Kind != DateTimeKind . Utc ? dateTime . ToStableUniversalTime ( ) : dateTime ;
65
- }
66
-
63
+
67
64
return parsedAsUtc ? dateTime . ToLocalTime ( ) : dateTime ;
68
65
}
69
66
@@ -102,14 +99,14 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
102
99
103
100
if ( dateTimeStr . Length == DefaultDateTimeFormatWithFraction . Length )
104
101
{
105
- var unspecifiedDate = JsConfig . AssumeUtc
102
+ var unspecifiedDate = JsConfig . AssumeUtc
106
103
? DateTime . Parse ( dateTimeStr , CultureInfo . InvariantCulture , DateTimeStyles . AssumeUniversal )
107
104
: DateTime . Parse ( dateTimeStr , CultureInfo . InvariantCulture ) ;
108
105
109
106
return unspecifiedDate . Prepare ( ) ;
110
107
}
111
- DateTimeKind kind = DateTimeKind . Unspecified ;
112
108
109
+ var kind = DateTimeKind . Unspecified ;
113
110
switch ( JsConfig . DateHandler )
114
111
{
115
112
case DateHandler . UnixTime :
@@ -124,9 +121,7 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
124
121
break ;
125
122
case DateHandler . ISO8601 :
126
123
if ( JsConfig . SkipDateTimeConversion )
127
- {
128
- dateTimeStr = RemoveUtcOffsets ( dateTimeStr , out kind ) ;
129
- }
124
+ dateTimeStr = RemoveUtcOffsets ( dateTimeStr , out kind ) ;
130
125
break ;
131
126
}
132
127
@@ -164,21 +159,18 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
164
159
165
160
try
166
161
{
167
- DateTime dateTime ;
168
162
if ( JsConfig . SkipDateTimeConversion )
169
163
{
170
- dateTime = DateTime . Parse ( dateTimeStr , null ,
171
- kind == DateTimeKind . Unspecified ?
172
- DateTimeStyles . None :
173
- kind == DateTimeKind . Local ?
174
- DateTimeStyles . AssumeLocal :
175
- DateTimeStyles . AssumeUniversal ) ;
176
- }
177
- else
178
- {
179
- var assumeKind = JsConfig . AssumeUtc ? DateTimeStyles . AssumeUniversal : DateTimeStyles . AssumeLocal ;
180
- dateTime = DateTime . Parse ( dateTimeStr , CultureInfo . InvariantCulture , assumeKind ) ;
164
+ return DateTime . Parse ( dateTimeStr , null ,
165
+ kind == DateTimeKind . Unspecified
166
+ ? DateTimeStyles . None
167
+ : kind == DateTimeKind . Local
168
+ ? DateTimeStyles . AssumeLocal
169
+ : DateTimeStyles . AssumeUniversal ) ;
181
170
}
171
+
172
+ var assumeKind = JsConfig . AssumeUtc ? DateTimeStyles . AssumeUniversal : DateTimeStyles . AssumeLocal ;
173
+ var dateTime = DateTime . Parse ( dateTimeStr , CultureInfo . InvariantCulture , assumeKind ) ;
182
174
return dateTime . Prepare ( ) ;
183
175
}
184
176
catch ( FormatException )
@@ -200,14 +192,14 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
200
192
}
201
193
202
194
private static string RemoveUtcOffsets ( string dateTimeStr , out DateTimeKind kind )
203
- {
195
+ {
204
196
var startOfTz = UtcOffsetInfoRegex . Match ( dateTimeStr ) ;
205
- if ( startOfTz . Index > 0 )
197
+ if ( startOfTz . Index > 0 )
206
198
{
207
- kind = DateTimeKind . Local ;
199
+ kind = DateTimeKind . Local ;
208
200
return dateTimeStr . Substring ( 0 , startOfTz . Index ) ;
209
201
}
210
- kind = dateTimeStr . Contains ( "Z" ) ? DateTimeKind . Utc : DateTimeKind . Unspecified ;
202
+ kind = dateTimeStr . Contains ( "Z" ) ? DateTimeKind . Utc : DateTimeKind . Unspecified ;
211
203
return dateTimeStr ;
212
204
}
213
205
@@ -230,7 +222,7 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
230
222
231
223
public static DateTime ? ParseManual ( string dateTimeStr )
232
224
{
233
- var dateKind = JsConfig . AssumeUtc || JsConfig . AlwaysUseUtc
225
+ var dateKind = JsConfig . AssumeUtc || JsConfig . AlwaysUseUtc
234
226
? DateTimeKind . Utc
235
227
: DateTimeKind . Local ;
236
228
@@ -251,7 +243,7 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
251
243
if ( dateTimeStr . EndsWith ( XsdUtcSuffix ) )
252
244
{
253
245
dateTimeStr = dateTimeStr . Substring ( 0 , dateTimeStr . Length - 1 ) ;
254
- dateKind = JsConfig . SkipDateTimeConversion ? DateTimeKind . Utc : dateKind ;
246
+ dateKind = JsConfig . SkipDateTimeConversion ? DateTimeKind . Utc : dateKind ;
255
247
}
256
248
257
249
var parts = dateTimeStr . Split ( 'T' ) ;
@@ -371,7 +363,7 @@ public static DateTimeOffset ParseDateTimeOffset(string dateTimeOffsetStr)
371
363
if ( Env . IsMono )
372
364
{
373
365
// Without that Mono uses a Local timezone))
374
- dateTimeOffsetStr = dateTimeOffsetStr . Substring ( 0 , dateTimeOffsetStr . Length - 1 ) + "+00:00" ;
366
+ dateTimeOffsetStr = dateTimeOffsetStr . Substring ( 0 , dateTimeOffsetStr . Length - 1 ) + "+00:00" ;
375
367
}
376
368
}
377
369
@@ -415,7 +407,7 @@ public static TimeSpan ParseTimeSpan(string dateTimeStr)
415
407
{
416
408
return dateTimeStr . StartsWith ( "P" , StringComparison . Ordinal ) || dateTimeStr . StartsWith ( "-P" , StringComparison . Ordinal )
417
409
? ParseXsdTimeSpan ( dateTimeStr )
418
- : dateTimeStr . Contains ( ":" )
410
+ : dateTimeStr . Contains ( ":" )
419
411
? TimeSpan . Parse ( dateTimeStr )
420
412
: ParseNSTimeInterval ( dateTimeStr ) ;
421
413
}
@@ -450,11 +442,12 @@ public static string ToShortestXsdDateTimeString(DateTime dateTime)
450
442
var timeOfDay = dateTime . TimeOfDay ;
451
443
452
444
var isStartOfDay = timeOfDay . Ticks == 0 ;
453
- if ( isStartOfDay && ! ( JsConfig . SkipDateTimeConversion ) )
445
+ if ( isStartOfDay && ! JsConfig . SkipDateTimeConversion )
454
446
return dateTime . ToString ( ShortDateTimeFormat ) ;
455
447
456
- var hasFractionalSecs = ( timeOfDay . Milliseconds != 0 )
457
- || ( ( timeOfDay . Ticks % TimeSpan . TicksPerMillisecond ) != 0 ) ;
448
+ var hasFractionalSecs = ( timeOfDay . Milliseconds != 0 )
449
+ || ( timeOfDay . Ticks % TimeSpan . TicksPerMillisecond != 0 ) ;
450
+
458
451
if ( JsConfig . SkipDateTimeConversion )
459
452
{
460
453
if ( ! hasFractionalSecs )
@@ -470,6 +463,7 @@ public static string ToShortestXsdDateTimeString(DateTime dateTime)
470
463
? dateTime . ToString ( DateTimeFormatTicksNoUtcOffset )
471
464
: PclExport . Instance . ToXsdDateTimeString ( dateTime ) ;
472
465
}
466
+
473
467
if ( ! hasFractionalSecs )
474
468
return dateTime . Kind != DateTimeKind . Utc
475
469
? dateTime . ToString ( DateTimeFormatSecondsUtcOffset )
@@ -594,15 +588,7 @@ public static void WriteWcfJsonDate(TextWriter writer, DateTime dateTime)
594
588
595
589
if ( JsConfig . DateHandler == DateHandler . ISO8601 )
596
590
{
597
- if ( ! JsConfig . SkipDateTimeConversion )
598
- {
599
591
writer . Write ( dateTime . ToString ( "o" , CultureInfo . InvariantCulture ) ) ;
600
- }
601
- else
602
- {
603
- var dt = dateTime . ToString ( "o" , CultureInfo . InvariantCulture ) ;
604
- writer . Write ( dt ) ;
605
- }
606
592
return ;
607
593
}
608
594
0 commit comments