DateTime для RFC-1123 дает неточный часовой пояс
Если я получаю отформатированную в RFC-1123 дату объекта DateTime, он показывает текущее местное время, но дает часовой пояс как GMT (что является неточным).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 ответа
Реализация.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" спецификатора на спецификатор смещения времени:
Вы могли бы просто сделать DateTime.UtcNow.ToString ("R")
, вы все равно получите часовой пояс GMT, но тогда время будет корректно смещено.