如果我得到 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 时区,但时间是正确偏移的。