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

我目前在英国夏令时 ,即UTC +1小时。 我使用以下代码确认我的PC是正确的,它返回true。

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

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

 DateTime.Now.ToString("u") 

它按照预期以UTC格式返回如下的确切当前系统日期,但结尾的Z( 祖鲁时间 )不是+01:00?

 2009-05-27 14:21:22Z 

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

这是正确的function吗?

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"); 

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

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

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

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

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