如果我得到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位并替换它似乎是非常混乱的。
有没有办法强制它包含正确的时区?
答案 0 :(得分:4)
.NET实现总是将结果表示为GMT,而不管实际日期的时间偏移量。
通过使用DateTime.Now.ToString("r");
,您实际上是在String.Format("ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", DateTime.Now);
,这是.NET RFC1123格式字符串,如MSDN上所示 - The RFC1123 ("R", "r") Format Specifier。
要获得所需的行为,您应该使用String.Format
,并使用时间偏移说明符替换说明符的固定“GMT”部分:
答案 1 :(得分:4)
你可以DateTime.UtcNow.ToString ("R")
,你仍然可以获得GMT时区,但时间正确偏移。