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

Commit b8fde7c

Browse files
committed
Ensure DateTime.Parse() treats Date's as UTC when JsConfig.AssumeUtc=true;
1 parent 0a1e9de commit b8fde7c

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/ServiceStack.Text/Common/DateTimeSerializer.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,11 @@ public static DateTime ParseShortestXsdDateTime(string dateTimeStr)
7979
if (dateTimeStr.Length == DefaultDateTimeFormat.Length
8080
|| dateTimeStr.Length == DefaultDateTimeFormatWithFraction.Length)
8181
{
82-
return DateTime.Parse(dateTimeStr, CultureInfo.InvariantCulture).Prepare();
82+
var unspecifiedDate = DateTime.Parse(dateTimeStr, CultureInfo.InvariantCulture);
83+
if (JsConfig.AssumeUtc)
84+
unspecifiedDate = DateTime.SpecifyKind(unspecifiedDate, DateTimeKind.Utc);
85+
86+
return unspecifiedDate.Prepare();
8387
}
8488

8589
switch (JsConfig.DateHandler)

tests/ServiceStack.Text.Tests/Utils/DateTimeSerializerTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,22 @@ public void DateTime_Is_Serialized_As_Utc_and_Deserialized_as_local()
354354
}
355355
}
356356

357+
[Test]
358+
public void Does_parse_as_UTC()
359+
{
360+
JsConfig.AssumeUtc = true;
361+
362+
var dateStr = "2014-08-27 14:30:23";
363+
var dateTime = dateStr.FromJson<DateTime>();
364+
365+
Assert.That(dateTime.Kind, Is.EqualTo(DateTimeKind.Utc));
366+
Assert.That(dateTime.Hour, Is.EqualTo(14));
367+
Assert.That(dateTime.Minute, Is.EqualTo(30));
368+
Assert.That(dateTime.Second, Is.EqualTo(23));
369+
370+
JsConfig.Reset();
371+
}
372+
357373
[Test]
358374
public void Can_serialize_nullable_DateTime()
359375
{

0 commit comments

Comments
 (0)