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