Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit e70b9fc

Browse files
committed
Refactor ParseManual so it can be called without static config
1 parent db0e897 commit e70b9fc

File tree

1 file changed

+27
-12
lines changed

1 file changed

+27
-12
lines changed

src/ServiceStack.Text/Common/DateTimeSerializer.cs

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -189,12 +189,24 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
189189

190190
public static DateTime? ParseManual(string dateTimeStr)
191191
{
192-
if (dateTimeStr == null || dateTimeStr.Length < ShortDateTimeFormat.Length)
193-
return null;
194-
195192
var dateKind = JsConfig.AssumeUtc || JsConfig.AlwaysUseUtc
196193
? DateTimeKind.Utc
197194
: 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+
198210
if (dateTimeStr.EndsWith(XsdUtcSuffix))
199211
{
200212
dateTimeStr = dateTimeStr.Substring(0, dateTimeStr.Length - 1);
@@ -204,16 +216,18 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
204216
if (parts.Length == 1)
205217
parts = dateTimeStr.SplitOnFirst(' ');
206218

207-
var dateParts = parts[0].Split('-','/');
219+
var dateParts = parts[0].Split('-', '/');
208220
int hh = 0, min = 0, ss = 0, ms = 0;
209221
double subMs = 0;
210222
int offsetMultiplier = 0;
211223

212224
if (parts.Length == 1)
213225
{
214226
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);
217231
}
218232
else if (parts.Length == 2)
219233
{
@@ -249,15 +263,16 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
249263
if (msStr.Length > 3)
250264
{
251265
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);
253267
}
254268
}
255269
}
256270

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);
258273
if (subMs != 0)
259274
{
260-
dateTime=dateTime.AddMilliseconds(subMs);
275+
dateTime = dateTime.AddMilliseconds(subMs);
261276
}
262277

263278
if (offsetMultiplier != 0 && timeOffset != null)
@@ -274,11 +289,11 @@ private static string RepairXsdTimeSeparator(string dateTimeStr)
274289
min = int.Parse(timeOffset.Substring(2));
275290
}
276291

277-
dateTime = dateTime.AddHours(offsetMultiplier * hh);
278-
dateTime = dateTime.AddMinutes(offsetMultiplier * min);
292+
dateTime = dateTime.AddHours(offsetMultiplier*hh);
293+
dateTime = dateTime.AddMinutes(offsetMultiplier*min);
279294
}
280295

281-
return dateTime.ToLocalTime().Prepare();
296+
return dateTime;
282297
}
283298

284299
return null;

0 commit comments

Comments
 (0)