文字列「2012-06-20T13:19:59.1091122Z」としてシリアル化された日付があります
DateTimeConverterを使用して、これは、 Kindプロパティが「Local」に設定されたDateTimeオブジェクト{22:49:59.1091122}に変換されます。
例えば。次のテストは失敗します。
private static readonly DateTime UtcDate = new DateTime(634757951991091122, DateTimeKind.Utc);
private const string UtcSerialisedDate = "2012-06-20T13:19:59.1091122Z";
[Test]
public void DateTimeConverter_Convert_From_Utc_String()
{
// Arrange
var converter = TypeDescriptor.GetConverter(typeof(DateTime));
// Act
var result = converter.ConvertFrom(UtcSerialisedDate);
// Assert
Assert.AreEqual(UtcDate, result);
Assert.AreEqual(DateTimeKind.Utc, ((DateTime)result).Kind);
}
これには少し驚いています...コンバーターによって返されるDateTimeオブジェクトはUTCであると予想していました。
ドキュメントには、DateTimeConverterがDateTime.Parseを使用すると書かれていますが、 DateTimeStyles.RoundtripKindオプションを使用してはいけないと思います。
これを回避する方法はありますか?