@@ -189,12 +189,24 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
189
189
190
190
public static DateTime ? ParseManual ( string dateTimeStr )
191
191
{
192
- if ( dateTimeStr == null || dateTimeStr . Length < ShortDateTimeFormat . Length )
193
- return null ;
194
-
195
192
var dateKind = JsConfig . AssumeUtc || JsConfig . AlwaysUseUtc
196
193
? DateTimeKind . Utc
197
194
: DateTimeKind . Local ;
195
+
196
+ var date = ParseManual ( dateTimeStr , dateKind ) ;
197
+ if ( date == null )
198
+ return null ;
199
+
200
+ return dateKind == DateTimeKind . Local
201
+ ? date . Value . ToLocalTime ( ) . Prepare ( )
202
+ : date ;
203
+ }
204
+
205
+ public static DateTime ? ParseManual ( string dateTimeStr , DateTimeKind dateKind )
206
+ {
207
+ if ( dateTimeStr == null || dateTimeStr . Length < ShortDateTimeFormat . Length )
208
+ return null ;
209
+
198
210
if ( dateTimeStr . EndsWith ( XsdUtcSuffix ) )
199
211
{
200
212
dateTimeStr = dateTimeStr . Substring ( 0 , dateTimeStr . Length - 1 ) ;
@@ -204,16 +216,18 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
204
216
if ( parts . Length == 1 )
205
217
parts = dateTimeStr . SplitOnFirst ( ' ' ) ;
206
218
207
- var dateParts = parts [ 0 ] . Split ( '-' , '/' ) ;
219
+ var dateParts = parts [ 0 ] . Split ( '-' , '/' ) ;
208
220
int hh = 0 , min = 0 , ss = 0 , ms = 0 ;
209
221
double subMs = 0 ;
210
222
int offsetMultiplier = 0 ;
211
223
212
224
if ( parts . Length == 1 )
213
225
{
214
226
return dateParts . Length == 3 && dateParts [ 2 ] . Length == "YYYY" . Length
215
- ? new DateTime ( int . Parse ( dateParts [ 2 ] ) , int . Parse ( dateParts [ 1 ] ) , int . Parse ( dateParts [ 0 ] ) , 0 , 0 , 0 , 0 , dateKind )
216
- : new DateTime ( int . Parse ( dateParts [ 0 ] ) , int . Parse ( dateParts [ 1 ] ) , int . Parse ( dateParts [ 2 ] ) , 0 , 0 , 0 , 0 , dateKind ) ;
227
+ ? new DateTime ( int . Parse ( dateParts [ 2 ] ) , int . Parse ( dateParts [ 1 ] ) , int . Parse ( dateParts [ 0 ] ) , 0 , 0 , 0 , 0 ,
228
+ dateKind )
229
+ : new DateTime ( int . Parse ( dateParts [ 0 ] ) , int . Parse ( dateParts [ 1 ] ) , int . Parse ( dateParts [ 2 ] ) , 0 , 0 , 0 , 0 ,
230
+ dateKind ) ;
217
231
}
218
232
else if ( parts . Length == 2 )
219
233
{
@@ -249,15 +263,16 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
249
263
if ( msStr . Length > 3 )
250
264
{
251
265
var subMsStr = msStr . Substring ( 3 ) ;
252
- subMs = double . Parse ( subMsStr ) / Math . Pow ( 10 , subMsStr . Length ) ;
266
+ subMs = double . Parse ( subMsStr ) / Math . Pow ( 10 , subMsStr . Length ) ;
253
267
}
254
268
}
255
269
}
256
270
257
- var dateTime = new DateTime ( int . Parse ( dateParts [ 0 ] ) , int . Parse ( dateParts [ 1 ] ) , int . Parse ( dateParts [ 2 ] ) , hh , min , ss , ms , dateKind ) ;
271
+ var dateTime = new DateTime ( int . Parse ( dateParts [ 0 ] ) , int . Parse ( dateParts [ 1 ] ) , int . Parse ( dateParts [ 2 ] ) , hh , min ,
272
+ ss , ms , dateKind ) ;
258
273
if ( subMs != 0 )
259
274
{
260
- dateTime = dateTime . AddMilliseconds ( subMs ) ;
275
+ dateTime = dateTime . AddMilliseconds ( subMs ) ;
261
276
}
262
277
263
278
if ( offsetMultiplier != 0 && timeOffset != null )
@@ -274,11 +289,11 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
274
289
min = int . Parse ( timeOffset . Substring ( 2 ) ) ;
275
290
}
276
291
277
- dateTime = dateTime . AddHours ( offsetMultiplier * hh ) ;
278
- dateTime = dateTime . AddMinutes ( offsetMultiplier * min ) ;
292
+ dateTime = dateTime . AddHours ( offsetMultiplier * hh ) ;
293
+ dateTime = dateTime . AddMinutes ( offsetMultiplier * min ) ;
279
294
}
280
295
281
- return dateTime . ToLocalTime ( ) . Prepare ( ) ;
296
+ return dateTime ;
282
297
}
283
298
284
299
return null ;
0 commit comments