3

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

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

4

2 回答 2

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”部分替换为时间偏移说明符:

于 2010-06-10T18:24:27.897 回答
4

你可以这样做DateTime.UtcNow.ToString ("R"),你仍然会得到 GMT 时区,但时间会正确偏移。

于 2012-09-18T06:38:10.707 回答