DateTime для RFC-1123 дает неточный часовой пояс - PullRequest
3 голосов
/ 12 февраля 2010

Если я получаю отформатированную в RFC-1123 дату объекта DateTime, он отображает текущее местное время, но в качестве часового пояса используется время по Гринвичу (что является неточным).
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 ничего не меняет. Я мог бы получить смещение UTC с помощью TimeZoneInfo.Local.GetUtcOffset (...) и отформатировать строку часового пояса из этого, но вычеркнув бит GMT и заменив его, кажется беспорядочно грязным.

Есть ли способ заставить его включить правильный часовой пояс?

Ответы [ 2 ]

4 голосов
/ 18 сентября 2012

Вы можете просто сделать DateTime.UtcNow.ToString ("R"), вы все равно получите часовой пояс GMT, но тогда время будет корректно смещено.

4 голосов
/ 10 июня 2010

Реализация .NET всегда выражает результат, как если бы он был по Гринвичу, независимо от временного смещения фактической даты.

Используя DateTime.Now.ToString("r");, вы, по сути, говорите String.Format("ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", DateTime.Now);, то есть строку формата .NET RFC1123, как указано в MSDN - Спецификатор формата RFC1123 ("R", "r") .

Чтобы получить требуемое поведение, вам, вероятно, следует использовать String.Format и заменить фиксированный раздел «GMT» спецификатора на спецификатор смещения времени:

...