@@ -45,7 +45,7 @@ public static class DateTimeSerializer
45
45
private const char XsdTimeSeparator = 'T' ;
46
46
private static readonly int XsdTimeSeparatorIndex = XsdDateTimeFormat . IndexOf ( XsdTimeSeparator ) ;
47
47
private const string XsdUtcSuffix = "Z" ;
48
- private static readonly char [ ] DateTimeSeperators = new [ ] { '-' , '/' } ;
48
+ private static readonly char [ ] DateTimeSeparators = { '-' , '/' } ;
49
49
private static readonly Regex UtcOffsetInfoRegex = new Regex ( "([+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])" , PclExport . Instance . RegexOptions ) ;
50
50
public static Func < string , Exception , DateTime > OnParseErrorFn { get ; set ; }
51
51
@@ -100,7 +100,8 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
100
100
return unspecifiedDate . Prepare ( ) ;
101
101
}
102
102
103
- if ( dateTimeStr . Length == DefaultDateTimeFormatWithFraction . Length )
103
+ var hasUtcSuffix = dateTimeStr . EndsWith ( XsdUtcSuffix ) ;
104
+ if ( ! hasUtcSuffix && dateTimeStr . Length == DefaultDateTimeFormatWithFraction . Length )
104
105
{
105
106
var unspecifiedDate = config . AssumeUtc
106
107
? DateTime . Parse ( dateTimeStr , CultureInfo . InvariantCulture , DateTimeStyles . AssumeUniversal )
@@ -109,7 +110,9 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
109
110
return unspecifiedDate . Prepare ( ) ;
110
111
}
111
112
112
- var kind = DateTimeKind . Unspecified ;
113
+ var kind = hasUtcSuffix
114
+ ? DateTimeKind . Utc
115
+ : DateTimeKind . Unspecified ;
113
116
switch ( config . DateHandler )
114
117
{
115
118
case DateHandler . UnixTime :
@@ -135,7 +138,7 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
135
138
136
139
if ( dateTimeStr . Length >= XsdDateTimeFormat3F . Length
137
140
&& dateTimeStr . Length <= XsdDateTimeFormat . Length
138
- && dateTimeStr . EndsWith ( XsdUtcSuffix ) )
141
+ && hasUtcSuffix )
139
142
{
140
143
var dateTime = Env . IsMono ? ParseManual ( dateTimeStr ) : null ;
141
144
if ( dateTime != null )
@@ -144,7 +147,7 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
144
147
return PclExport . Instance . ParseXsdDateTimeAsUtc ( dateTimeStr ) ;
145
148
}
146
149
147
- if ( dateTimeStr . Length == CondensedDateTimeFormat . Length && dateTimeStr . IndexOfAny ( DateTimeSeperators ) == - 1 )
150
+ if ( dateTimeStr . Length == CondensedDateTimeFormat . Length && dateTimeStr . IndexOfAny ( DateTimeSeparators ) == - 1 )
148
151
{
149
152
return DateTime . ParseExact ( dateTimeStr , "yyyyMMdd" , CultureInfo . InvariantCulture , DateTimeStyles . None ) ;
150
153
}
@@ -164,12 +167,14 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
164
167
{
165
168
if ( config . SkipDateTimeConversion )
166
169
{
167
- return DateTime . Parse ( dateTimeStr , null ,
168
- kind == DateTimeKind . Unspecified
169
- ? DateTimeStyles . None
170
- : kind == DateTimeKind . Local
171
- ? DateTimeStyles . AssumeLocal
172
- : DateTimeStyles . AssumeUniversal ) ;
170
+ var dateTimeStyle = kind == DateTimeKind . Unspecified
171
+ ? DateTimeStyles . None
172
+ : kind == DateTimeKind . Local
173
+ ? DateTimeStyles . AssumeLocal
174
+ : DateTimeStyles . AssumeUniversal ;
175
+ if ( config . AlwaysUseUtc )
176
+ dateTimeStyle |= DateTimeStyles . AdjustToUniversal ;
177
+ return DateTime . Parse ( dateTimeStr , null , dateTimeStyle ) ;
173
178
}
174
179
175
180
var assumeKind = config . AssumeUtc ? DateTimeStyles . AssumeUniversal : DateTimeStyles . AssumeLocal ;
0 commit comments