DateTime to RFC-1123 gives inaccurate timezone
If I get the RFC-1123 formatted date of a DateTime object, it gives the current local time, but gives the timezone as GMT (which is inaccurate).
DateTime.Now.ToString("r");
returns
Fri, 12 Feb 2010 16:23:03 GMT
At 4:23 in the afternoon, but my timezone is UTC+10 (plus, we're currently observing daylight saving time).
Now, I can get a return value that's "correct" by converting to UTC first:
DateTime.UtcNow.ToString("r");
returns
Fri, 12 Feb 2010 05:23:03 GMT
However, ideally, I'd like to get the right timezone, which I guess would be
Fri, 12 Feb 2010 16:23:03 +1100
Passing in the current CultureInfo doesn't change anything. I could get a UTC offset with TimeZoneInfo.Local.GetUtcOffset(...) and format a timezone strin开发者_C百科g from that, but stripping out the GMT bit and replacing it seems gratutiously messy.
Is there a way to force it to include the correct timezone?
The .NET implementation always expresses the result as if it were GMT, irrespective of the time offset of the actual date.
By using DateTime.Now.ToString("r");
you're essentially saying String.Format("ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", DateTime.Now);
, which is the .NET RFC1123 format string, as indicated on MSDN - The RFC1123 ("R", "r") Format Specifier.
To get the behaviour you require, you should probably use String.Format
, and replace the fixed 'GMT' section of the specifier with a time offset specifier:
- The "z" Custom Format Specifier
- The "zz" Custom Format Specifier
- The "zzz" Custom Format Specifier
You could just do DateTime.UtcNow.ToString ("R")
, you will still get GMT timezone but the time is correctly offset then.
精彩评论