Преобразование времени локальной клиентской системы в CST и наоборот - PullRequest
3 голосов
/ 13 октября 2009

Мне нужно хранить дату и время в часовом поясе CST независимо от часового пояса.

Клиенты, которые получают доступ к приложению, находятся в разных часовых поясах, таких как IST, CST, EST, ...

Мне нужно сохранить все данные, введенные клиентом в часовом поясе CST, в моей базе данных. И во время поиска мне нужно конвертировать обратно в местный часовой пояс.

Как этого добиться?

Ответы [ 2 ]

2 голосов
/ 13 октября 2009

Обычно принято хранить все значения даты и времени в вашей БД в формате GMT ​​/ UTC.

Для тех, кто хочет отобразить значение UTC для определенного часового пояса для разных пользователей приложения, например, как упоминалось в wilpeck, предлагается определить локаль конечных пользователей и:

  • при сохранении сохраните локаль со значением даты UTC
  • при чтении отображать значение UTC по местному времени со связанным значением языкового стандарта

EDIT:

Например:

Возможно, у вас есть таблица с полем StartDateTime , поэтому для поддержки нескольких часовых поясов у вас может быть дополнительное поле StartDateTimeOffset . Если клиент находится в зоне стандартного индийского времени (IST), у вас может быть значение datetime 2009/10/13 14:45, то есть 2009/10/13 09:15 в UTC. Таким образом, вы должны сохранить значение UTC (2009/10/13 09:15) в поле StartDateTime и сохранить смещение +05: 30 в поле StartDateTimeOffset . Теперь, когда вы читаете это значение обратно из БД, вы можете использовать смещение для преобразования значения даты и времени UTC (2009/10/13 09:15) обратно в местное время 2009/10/13 14: 45.

2 голосов
/ 13 октября 2009

Нечто подобное, скорее всего, сработает для вас. У меня может быть неправильное значение для идентификатора часового пояса, но я думаю, что это близко. Материал для часовых поясов доступен в .NET 3.5 +

DateTime clientDateTime = DateTime.Now;
        DateTime centralDateTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(clientDateTime, "Central Time (US & Canada)");

EDIT:

Если вы можете сохранить DateTime в UTC, обнаруживая часовой пояс клиента всякий раз, когда вам предоставляют дату, которая будет наилучшим вариантом. Затем в зависимости от часового пояса клиента вы можете отобразить дату в соответствии с локальным часовым поясом клиента.

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