【发布时间】:2018-06-14 16:55:02
【问题描述】:
我从 .NET MVC 中的字符串解析 DateTime 获得了一些乐趣,并且我发现了一些奇怪的行为。看看这个测试:
[Test]
public void DoesItWork()
{
DateTime theTime = DateTime.Now;
DateTime theUTCTime = theTime.ToUniversalTime();
Assert.IsTrue(theTime==theUTCTime);
}
我现在在英国,而且是英国夏令时,所以我预计 UTC 时间会比 DateTime.Now 的值晚一个小时。就是这样。但是当我在我的初始日期时间调用.ToUniversalTime() 并减去一个小时时,该值的 Kind 属性也会更新 - 从 Local 到 Utc。这也是我所期望的。
但是当我来比较这两个DateTimevariables 的值时,相等运算符没有考虑不同的 Kind 值,而只是报告它们是不同的值。对我来说,这似乎完全错误。
谁能解释为什么它会这样工作?
【问题讨论】:
-
因为documented是这样的? “如果它们的 Ticks 属性值相等,则当前实例和值相等。在相等性测试中不考虑它们的 Kind 属性值。”
-
您是否断言对象属于日期时间?如果您比较 theTime.Kind,您会期待什么?有一种称为 TimeZoneInfo 的类型可以为您提供日期计算。
-
对于信息,DateTimeOffset 的行为方式相同(即具有相同 UTC 的两个“不同”DateTimeOffset 被认为是相等的),所以你在那里也好不到哪里去。 NUnit 允许您在 DateTimeOffsets 上的 IsEqual 约束上指定 WithSameOffset 以使比较包括偏移量。您可以为 DateTimes 执行 WithSameKind,如 NUnit issue 196 所示(接近该页面的末尾)
标签: c# .net datetime datetime-format