Browse Source

Finalized date time handling

pull/303/head
Sebastian 8 years ago
parent
commit
e89050c7ea
  1. 12
      src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConverter.cs
  2. 11
      src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonWriter.cs
  3. 24
      tests/Squidex.Infrastructure.Tests/MongoDb/BsonConverterTests.cs

12
src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConverter.cs

@ -6,6 +6,7 @@
// ==========================================================================
using System;
using System.Globalization;
using MongoDB.Bson;
using Newtonsoft.Json.Linq;
@ -95,11 +96,18 @@ namespace Squidex.Infrastructure.MongoDb
if (value is DateTime dateTime)
{
return dateTime.ToString("yyyy-MM-ddTHH:mm:ssK");
return dateTime.ToString("yyyy-MM-ddTHH:mm:ssK", CultureInfo.InvariantCulture);
}
else if (value is DateTimeOffset dateTimeOffset)
{
return dateTimeOffset.UtcDateTime.ToString("yyyy-MM-ddTHH:mm:ssK");
if (dateTimeOffset.Offset == TimeSpan.Zero)
{
return dateTimeOffset.UtcDateTime.ToString("yyyy-MM-ddTHH:mm:ssK", CultureInfo.InvariantCulture);
}
else
{
return dateTimeOffset.ToString("yyyy-MM-ddTHH:mm:ssK", CultureInfo.InvariantCulture);
}
}
else
{

11
src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonWriter.cs

@ -135,12 +135,19 @@ namespace Squidex.Infrastructure.MongoDb
public override void WriteValue(DateTime value)
{
bsonWriter.WriteString(value.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture));
bsonWriter.WriteString(value.ToString("yyyy-MM-ddTHH:mm:ssK", CultureInfo.InvariantCulture));
}
public override void WriteValue(DateTimeOffset value)
{
bsonWriter.WriteString(value.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture));
if (value.Offset == TimeSpan.Zero)
{
bsonWriter.WriteString(value.UtcDateTime.ToString("yyyy-MM-ddTHH:mm:ssK", CultureInfo.InvariantCulture));
}
else
{
bsonWriter.WriteString(value.UtcDateTime.ToString("yyyy-MM-ddTHH:mm:ssK", CultureInfo.InvariantCulture));
}
}
public override void WriteValue(byte[] value)

24
tests/Squidex.Infrastructure.Tests/MongoDb/BsonConverterTests.cs

@ -87,7 +87,7 @@ namespace Squidex.Infrastructure.MongoDb
Bool = true,
Byte = 0x2,
Bytes = new byte[] { 0x10, 0x12, 0x13 },
DateTimeOffset = DateTime.UtcNow.Date,
DateTimeOffset = DateTime.Today,
DateTime = DateTime.UtcNow.Date,
Float32 = 32.5f,
Float64 = 32.5d,
@ -126,17 +126,35 @@ namespace Squidex.Infrastructure.MongoDb
}
[Fact]
public void Should_serialize_to_iso()
public void Should_serialize_datetime_to_iso()
{
source.DateTime = new DateTime(2012, 12, 12, 12, 12, 12, DateTimeKind.Utc);
source.DateTimeOffset = new DateTime(2012, 12, 12, 12, 12, 12, DateTimeKind.Utc);
var target = JObject.FromObject(source).ToBson();
Assert.Equal("2012-12-12T12:12:12Z", target["DateTime"].ToString());
}
[Fact]
public void Should_serialize_datetimeoffset_to_iso_utc()
{
source.DateTimeOffset = new DateTime(2012, 12, 12, 12, 12, 12, DateTimeKind.Utc);
var target = JObject.FromObject(source).ToBson();
Assert.Equal("2012-12-12T12:12:12Z", target["DateTimeOffset"].ToString());
}
[Fact]
public void Should_serialize_datetimeoffset_to_iso_utc_with_offset()
{
source.DateTimeOffset = new DateTimeOffset(2012, 12, 12, 12, 12, 12, TimeSpan.FromHours(2));
var target = JObject.FromObject(source).ToBson();
Assert.Equal("2012-12-12T12:12:12+02:00", target["DateTimeOffset"].ToString());
}
[Fact]
public void Should_write_problematic_object()
{

Loading…
Cancel
Save