谜语:三个相等的日期何时不相等

时间:2009-03-20 22:19:09

标签: .net

从三个变量开始,都是System.DateTime。

a: 10/2/2009 2:30:00 PM
b: 10/2/2009 2:30:00 PM
c: 10/2/2009 2:30:00 PM

将它们相互比较。

a=b: True
b=c: True
c=a: True

好的,我们已经确定所有三个日期都是平等的。因此,当我们将它们全部转换为世界时,我们将得到相同的结果。正确?

a.ToUniversalTime: 10/2/2009 9:30:00 PM
b.ToUniversalTime: 10/2/2009 9:30:00 PM
c.ToUniversalTime: 10/2/2009 2:30:00 PM

那发生了什么?

3 个答案:

答案 0 :(得分:8)

来自http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx

  

从.NET Framework 2.0版开始,ToUniversalTime方法返回的值由当前DateTime对象的Kind属性确定。

  • 种类== Utc - 未执行转换
  • 种类==本地或未指定 - 根据当地时区执行转换

答案 1 :(得分:0)

我敢打赌,这与c在与a和b不同的时区有关。

答案 2 :(得分:0)

我同意,c在不同的时区。

    Dim a As DateTime = #10/2/2009 2:30:00 PM#
    Dim b As DateTime = #10/2/2009 2:30:00 PM#
    Dim c As DateTime = #10/2/2009 2:30:00 PM#

    If Not (a = b AndAlso b = c AndAlso c = a) Then Stop
    a = a.ToUniversalTime
    b = b.ToUniversalTime
    c = c.ToUniversalTime

    If Not (a = b AndAlso b = c AndAlso c = a) Then Stop
    'reach here no problem, so one of them was in a different timezone