Это можно сделать на стороне сервера, если у вас есть объект TimeZoneInfo
. Вы можете использовать статический метод ConvertTimeFromUtc()
.
В C #:
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(myDbDateTime, myTimeZoneInfo);
Если у вас нет часового пояса на стороне сервера, все становится непросто, поскольку javascript не предоставляет часовой пояс клиента (если только он не находится в США, и даже тогда только в некоторых браузерах). В этом случае может быть лучше заставить пользователя выбрать свой текущий часовой пояс и сохранить его в своей учетной записи. Если это отображается анонимным пользователям, вам, вероятно, следует отобразить в UTC по умолчанию и предоставить возможность обновить его для выбранного часового пояса.
Обновление
При попытке автоматического определения часового пояса пользователя возникает несколько проблем.
- Часовой пояс не предоставляется серверу пользовательским агентом.
- Javascript не предоставляет доступ к часовому поясу (за исключением некоторых браузеров, иногда).
Функция javascript getTimezoneOffset()
может показаться хорошей идеей, но, поскольку существует несколько часовых поясов с одинаковым смещением, это не уникальное значение. Разница между многими из этих неуникальных зон заключается в использовании летнего времени.
Пример: Индиана не относится к летнему времени. Следовательно, в течение полугода их смещение соответствует восточному времени, а другая половина - центральному времени.
Если, однако, ваша пользовательская база находится в основном в США и использует IE, Chrome, Safari или Firefox, то вы можете использовать метод toString()
для объекта Date
для получения часового пояса. Эти браузеры добавляют часовой пояс к строке даты различными способами. За пределами США часовой пояс не включен во все браузеры (хотя некоторые все еще могут показывать его).
Открыть http://jsbin.com/onulo3 для наблюдения:
IE8: Вс 14 февраля 22:12:22 EST 2010
Хром: Вс 14 февраля 2010 22:12:22 GMT-0500 (восточное стандартное время)
Safari: Вс 14 февраля 2010 22:12:22 GMT-0500 (восточное стандартное время)
Firefox: Вс 14 февраля 2010 22:12:22 GMT-0500 (восточное стандартное время)
С помощью некоторого анализа вы можете определить часовой пояс для всех ваших американских пользователей. Для всех остальных вы можете отображать время в UTC (с уведомлением об этом).