代码之家  ›  专栏  ›  技术社区  ›  John

为什么DateTime.Now.ToString(“u”)不起作用?

  •  11
  • John  · 技术社区  · 17 年前

    我现在在 British summer time 也就是UTC+1小时。我用以下代码确认我的电脑是正确的,它返回true。

    System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(Date.Now)
    

    我的问题是,为什么UTC格式化程序不能像我预期的那样工作:

    DateTime.Now.ToString("u")
    

    它以预期的UTC格式返回准确的当前系统日期,如下所示,但带有Z( Zulu Time )最后不是凌晨1点吗?

    2009-05-27 14:21:22Z
    

    2009-05-27 14:21:22+01:00
    

    这是正确的功能吗?

    3 回复  |  直到 14 年前
        1
  •  21
  •   Community Mohan Dere    6 年前

    MSDN声明如下:

    表示由DateTimeFormatInfo.UniversalSortableDateTimePattern属性定义的自定义日期和时间格式字符串。模式反映已定义的标准,并且属性为只读。因此,无论所使用的区域性或提供的格式提供程序如何,它都是相同的。自定义格式字符串为“yyyy'-'MM'-'dd HH':'MM':'ss'Z'”。

    使用此标准格式说明符时,格式化或解析操作始终使用不变区域性。

    格式化不会转换日期和时间对象的时区。因此,在使用此格式说明符之前,应用程序必须将日期和时间转换为协调世界时(UTC)。

    在格式化当前日期之前,应使用以下代码将其转换为UTC:

    DateTime.UtcNow.ToString("u")
    

    DateTime.Now.ToUniversalTime().ToString("u")
    

    要以您期望的格式显示(即2009-05-27 14:21:22+01:00),您需要使用自定义日期格式:

    DateTime.Now.ToString("yyyy-MM-dd HH:mm:sszzz");
    
        2
  •  7
  •   Community Mohan Dere    6 年前

    “u”是通用可排序日期/时间模式,而不是UTC格式;引用 documentation :

    表示由DateTimeFormatInfo.:.UniversalSortableDateTimePattern属性定义的自定义日期和时间格式字符串。模式反映已定义的标准,并且属性为只读。因此,无论所使用的区域性或提供的格式提供程序如何,它都是相同的。自定义格式字符串为“yyyy'-'MM'-'dd HH':'MM':'ss'Z'”。

    使用此标准格式说明符时,格式化或解析操作始终使用不变区域性。

        3
  •  4
  •   Badaro    17 年前

    您需要使用DateTime.Now.ToUniversalTime().ToString(“u”)。