c# - RFC-1123 的日期时间给出了不准确的时区

标签 c# .net datetime rfc822 rfc1123

如果我得到 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/

相关文章:

c# - 使用 Entity Framework 6 流式传输 varbinary(max) 数据

c# - 为什么文件访问被拒绝

c# - .NET Core 单元测试未显示在 AppVeyor 测试窗口(和徽章)中

c# - 枚举作为其自己的自定义属性构造函数的参数

iphone - 获取错误域=NSURLErrorDomain 代码=-1004 "Could not connect to the server."

c# - Jon Skeet 的 Singleton 说明

javascript - Moment Timezone JS,返回 Javascript 日期

javascript - 解析包含日期的 JSON 数据会创建错误的 Date 对象

c# - 在 C# 中减去时间的最简单方法是什么?

c# - 如何在 C# 中按特定条件按属性对对象列表<t>进行排序