Joh*_*ohn 11 .net c# vb.net datetime utc
我目前在英国夏令时,即UTC +1小时.我通过以下代码确认我的PC是正确的,它返回true.
System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(Date.Now)
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么UTC格式化程序不能像我期望的那样工作:
DateTime.Now.ToString("u")
Run Code Online (Sandbox Code Playgroud)
它按照预期以UTC格式返回如下的确切当前系统日期,但结尾的Z(祖鲁时间)不是+01:00?
即
2009-05-27 14:21:22Z
Run Code Online (Sandbox Code Playgroud)
不
2009-05-27 14:21:22+01:00
Run Code Online (Sandbox Code Playgroud)
这是正确的功能吗?
Pat*_*ald 21
MSDN声明如下:
表示由DateTimeFormatInfo.UniversalSortableDateTimePattern属性定义的自定义日期和时间格式字符串.该模式反映了已定义的标准,并且该属性是只读的.因此,无论使用何种文化或提供格式提供程序,它始终是相同的.自定义格式字符串是"yyyy" - 'MM' - 'dd HH':'mm':'ss'Z'".
使用此标准格式说明符时,格式化或解析操作始终使用不变文化.
格式化不会转换日期和时间对象的时区.因此,在使用此格式说明符之前,应用程序必须将日期和时间转换为协调世界时(UTC).
在格式化之前,您应该使用以下代码将当前日期转换为UTC:
DateTime.UtcNow.ToString("u")
Run Code Online (Sandbox Code Playgroud)
要么
DateTime.Now.ToUniversalTime().ToString("u")
Run Code Online (Sandbox Code Playgroud)
要以您期望的格式显示(即2009-05-27 14:21:22 + 01:00),您需要使用自定义日期格式:
DateTime.Now.ToString("yyyy-MM-dd HH:mm:sszzz");
Run Code Online (Sandbox Code Playgroud)
"u"是通用可排序的日期/时间模式,而不是UTC格式; 引用文档:
表示由DateTimeFormatInfo .. ::.UniversalSortableDateTimePattern属性定义的自定义日期和时间格式字符串.该模式反映了已定义的标准,并且该属性是只读的.因此,无论使用何种文化或提供格式提供程序,它始终是相同的.自定义格式字符串是"yyyy" - 'MM' - 'dd HH':'mm':'ss'Z'".
使用此标准格式说明符时,格式化或解析操作始终使用不变文化.
格式化不会转换日期和时间对象的时区.因此,在使用此格式说明符之前,应用程序必须将日期和时间转换为协调世界时(UTC).
| 归档时间: |
|
| 查看次数: |
14588 次 |
| 最近记录: |