如果我得到 DateTime 对象的 RFC-1123 格式日期,它会给出当前本地时间,但会给出 GMT 时区(这是不准确的)。
DateTime.Now.ToString("r");
返回
2010 年 2 月 12 日星期五 16:23:03 GMT
下午 4:23,但我的时区是 UTC+10(另外,我们目前正在观察夏令时)。
现在,我可以通过首先转换为 UTC 来获得“正确”的返回值:
DateTime.UtcNow.ToString("r");
返回
2010 年 2 月 12 日星期五 05:23:03 GMT
但是,理想情况下,我想获得正确的时区,我想应该是
2010 年 2 月 12 日星期五 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 - The RFC1123 ("R", "r") Format Specifier 所示.
要获得所需的行为,您可能应该使用 String.Format
,并将说明符的固定“GMT”部分替换为时间偏移说明符:
关于c# - RFC-1123 的日期时间给出了不准确的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2249889/