转换日期字符串与负时间设置DateTime.Kind属性不同

时间:2014-01-28 14:20:17

标签: .net vb.net datetime

使用CDate()或DateTime.TryParse(),以下两个日期将使用不同的Kind属性进行转换。

    Dim date1 As Date
    Dim date2 As Date

    date1 = CDate("1/29/2014 2:00 AM")
    date2 = CDate("1/29/2014 -7:00")

    Debug.WriteLine("date1: " & date1.ToString & ", date2: " & date2.ToString)
    Debug.WriteLine(String.Format("Kind {0}, {1}", date1.Kind, date2.Kind.ToString))

输出

date1: 1/29/2014 2:00:00 AM, date2: 1/29/2014 2:00:00 AM
Kind: Unspecified, Local

我的系统设置为东部标准时间(-5小时UTC),因此解释了凌晨2点,但为什么date2转换为本地时间和日期1未指定?

1 个答案:

答案 0 :(得分:2)

“ - 7:00”并不代表你(可能)认为它的作用。它当然不可能是时间,因为时间永远不会消极。但是CDate()仍然可以在不抛出异常的情况下烘焙它,日期字符串可以包含签名的UTC偏移量。这可能是消极的。

因此字符串可以代表UTC-7时区的午夜。由于您居住在UTC-5,因此明确地转变为当地时间凌晨2点。

与CDate(“1/29/2014 +7:00”)比较,也是午夜,但在地球的另一端。