DateTime.Now представлен как время по Гринвичу на PST-сервере. - PullRequest
4 голосов
/ 13 июля 2011

Я храню информацию в базе данных и задаю свойству POCO значение DateTime.Now.

Когда отображается это значение, оно отображается как время PST.Я хотел бы, чтобы он отображался как время по Гринвичу.

Я делаю что-то подобное для отображения / сохранения или есть лучший способ?

TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("GMT");  
var GMTTime = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now, tz));

Также необходимо учитывать летнее время, так как Великобритания меняет свои часы в разное время года, чем США:

ОБНОВЛЕНИЕ: Я обнаружил, что вНастройка часового пояса позволяет передавать стандартное время по Гринвичу или среднее время по Гринвичу, первое с учетом летнего времени

Ответы [ 3 ]

5 голосов
/ 13 июля 2011

Сохраните как UTC . Он предназначен для универсального независимого от часового пояса времени.

DateTime currentUtcTime = DateTime.UtcNow;
DateTime localTime = currentUtcTime.ToLocalTime();
DateTime backToUtcAgain = localTime.ToUniversalTime();

Является ли данный DateTime уже UTC или местное время определяется DateTime.Kind. Вы должны помнить об этом при сериализации / десериализации значений DateTime (например, из базы данных), потому что эта информация часто не сохраняется, и когда вы получите обратно DateTime, в большинстве случаев она будет иметь значение DateTimeKind.Unspecified , что может вызвать проблемы с методами преобразования. Я просто заставляю DateTimeKind.Utc загружать что-либо из постоянного хранилища данных.

1 голос
/ 13 июля 2011

Посмотрите на DateTimeOffset.

Я бы предложил изменить ваше свойство DateTime на этот тип

MSDN DateTime против DateTimeOffSet

1 голос
/ 13 июля 2011

есть DateTime.UtcNow, если это соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...