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

C# RFC-1123的日期时间给出了不准确的时区,c#,.net,datetime,rfc822,rfc1123,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格林威治标准时间 然而,理

如果我得到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格林威治标准时间

然而,理想情况下,我希望得到正确的时区,我想应该是
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-所示

要获得所需的行为,您可能应该使用
String.Format
,并用时间偏移说明符替换说明符的固定“GMT”部分:


您只需执行
DateTime.UtcNow.ToString(“R”)
,您仍将获得GMT时区,但此时时间已正确偏移。

这是正确的,但您仍必须替换时区。这就是我知道我的服务器是EST时使用的方法。date.ToLocalTime().ToString(“R”).Replace(“GMT”、“EST”)如果要修改web请求中的日期头,可以使用此选项。我在dev&prod中使用它,它很有效。MethodInfo priMethod=client.Headers.GetType().GetMethod(“AddWithoutValidate”,BindingFlags.Instance | BindingFlags.NonPublic);Invoke(client.Headers,新对象[]{“Date”,);