RFC-1123的DateTime给出了不准确的时区

时间:2010-02-12 05:40:23

标签: c# .net datetime rfc822 rfc1123

如果我得到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位并替换它似乎是非常混乱的。

有没有办法强制它包含正确的时区?

2 个答案:

答案 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时区,但时间正确偏移。