RFC-1123的DateTime给出了不准确的时区
如果我得到DateTime对象的RFC-1123格式化日期,它会给出当前的本地时间,但会给出时区为GMT(这是不准确的)。
DateTime.Now.ToString("r");
回报
Fri, 12 Feb 2010 16:23:03 GMT
下午4:23,但我的时区是UTC + 10(另外,我们目前正在观察夏令时)。
现在,我可以通过首先转换为UTC来获得“正确”的返回值:
DateTime.UtcNow.ToString("r");
回报
Fri, 12 Feb 2010 05:23:03 GMT
但是,理想情况下,我想获得正确的时区,我想这将是
Fri, 12 Feb 2010 16:23:03 +1100
传入当前的CultureInfo并没有改变任何东西。 我可以使用TimeZoneInfo.Local.GetUtcOffset(…)获得UTC偏移量并从中格式化时区字符串,但是删除GMT位并替换它似乎是非常混乱。
有没有办法强制它包含正确的时区?
.NET实现总是将结果表示为GMT,而不管实际日期的时间偏移量。
通过使用DateTime.Now.ToString("r");
你基本上是在说String.Format("ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", DateTime.Now);
,这是.NET RFC1123格式字符串,如MSDN上所示 – RFC1123(“R”,“r”)格式说明符 。
要获得所需的行为,您应该使用String.Format
,并使用时间偏移说明符替换说明符的固定“GMT”部分:
- “z”自定义格式说明符
- “zz”自定义格式说明符
- “zzz”自定义格式说明符
你可以只做DateTime.UtcNow.ToString ("R")
,你仍然会得到GMT时区,但时间正确偏移。