@@ -71,7 +71,8 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
7171 DateTimeStyles . AdjustToUniversal ) ;
7272
7373 if ( dateTimeStr . Length >= XsdDateTimeFormat3F . Length
74- && dateTimeStr . Length <= XsdDateTimeFormat . Length )
74+ && dateTimeStr . Length <= XsdDateTimeFormat . Length
75+ && dateTimeStr . EndsWith ( "Z" ) )
7576 {
7677#if NETFX_CORE
7778 var dateTimeType = JsConfig . DateHandler != JsonDateHandler . ISO8601
@@ -80,11 +81,7 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
8081
8182 return XmlConvert . ToDateTimeOffset ( dateTimeStr , dateTimeType ) . DateTime . Prepare ( ) ;
8283#else
83- var dateTimeType = JsConfig . DateHandler != JsonDateHandler . ISO8601
84- ? XmlDateTimeSerializationMode . Local
85- : XmlDateTimeSerializationMode . RoundtripKind ;
86-
87- return XmlConvert . ToDateTime ( dateTimeStr , dateTimeType ) . Prepare ( ) ;
84+ return XmlConvert . ToDateTime ( dateTimeStr , XmlDateTimeSerializationMode . Utc ) . Prepare ( ) ;
8885#endif
8986 }
9087
@@ -190,13 +187,24 @@ public static string ToShortestXsdDateTimeString(DateTime dateTime)
190187 {
191188 var timeOfDay = dateTime . TimeOfDay ;
192189
193- if ( timeOfDay . Ticks == 0 )
194- return dateTime . ToString ( ShortDateTimeFormat ) ;
190+ string xsdDateTimeString ;
195191
196- if ( timeOfDay . Milliseconds == 0 )
197- return dateTime . ToStableUniversalTime ( ) . ToString ( XsdDateTimeFormatSeconds ) ;
192+ if ( timeOfDay . Ticks == 0 )
193+ {
194+ xsdDateTimeString = dateTime . ToString ( ShortDateTimeFormat ) ;
195+ }
196+ else if ( timeOfDay . Milliseconds == 0 )
197+ {
198+ xsdDateTimeString = dateTime . Kind != DateTimeKind . Utc
199+ ? dateTime . ToString ( "yyyy-MM-ddTHH:mm:sszzz" )
200+ : dateTime . ToString ( XsdDateTimeFormatSeconds ) ;
201+ }
202+ else
203+ {
204+ xsdDateTimeString = dateTime . Kind != DateTimeKind . Utc ? dateTime . ToString ( "yyyy-MM-ddTHH:mm:ss.fffffffzzz" ) : ToXsdDateTimeString ( dateTime ) ;
205+ }
198206
199- return ToXsdDateTimeString ( dateTime ) ;
207+ return xsdDateTimeString ;
200208 }
201209
202210
0 commit comments