【问题标题】:Why does DateTime.Now.ToString("u") not work?为什么 DateTime.Now.ToString("u") 不起作用?
【发布时间】:2010-10-29 06:40:42
【问题描述】:

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

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

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

DateTime.Now.ToString("u")

它按预期以 UTC 格式返回准确的当前系统日期,但末尾的 Z (Zulu Time) 不是 +01:00?

2009-05-27 14:21:22Z

不是

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

这是正确的功能吗?

【问题讨论】:

    标签: c# .net vb.net datetime utc


    【解决方案1】:

    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】:

      "u" 是通用的可排序日期/时间模式,不是 UTC 格式;引用documentation

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

      当使用这个标准格式说明符时,格式化或解析操作总是使用不变的文化。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-07
          相关资源
          最近更新 更多