Skip to content

Commit 5ad984c

Browse files
committed
(#384) Changed DateTimeConverter on client and server side to handle 'default' DateTime correctly.
1 parent d4fd2f7 commit 5ad984c

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/CommunityToolkit.Datasync.Client/Serialization/DateTimeConverter.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, Jso
2626
}
2727
else
2828
{
29+
// Check if datetime was 'default'. If so do not adjust to local time.
30+
DateTime utc = DateTime.Parse(token, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);
31+
if (utc == default)
32+
{
33+
return utc;
34+
}
35+
2936
return DateTime.Parse(token);
3037
}
3138
}

src/CommunityToolkit.Datasync.Server.Abstractions/Json/DateTimeConverter.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,24 @@ public class DateTimeConverter : JsonConverter<DateTime>
1818

1919
/// <inheritdoc />
2020
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
21-
=> DateTime.Parse(reader.GetString() ?? string.Empty);
21+
{
22+
string? token = reader.GetString();
23+
if (string.IsNullOrEmpty(token))
24+
{
25+
return DateTime.MinValue;
26+
}
27+
else
28+
{
29+
// Check if datetime was 'default'. If so do not adjust to local time.
30+
DateTime utc = DateTime.Parse(token, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);
31+
if (utc == default)
32+
{
33+
return utc;
34+
}
35+
36+
return DateTime.Parse(token);
37+
}
38+
}
2239

2340
/// <inheritdoc />
2441
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)

0 commit comments

Comments
 (0)