Проблема, связанная с тем, что клиент самостоятельно сообщает о своем часовом поясе , заключается в том, что всегда есть вероятность (насколько велика вероятность спора), что вы действительно получите Смещение UTC . Если вы получите смещение UTC, ваша логика будет работать нормально большую часть времени, но в действительности будет применяться только к точным временным меткам, созданным клиентом. Любое прошедшее или будущее время может иметь другое смещение UTC, и это невозможно предсказать без надлежащей базы данных часовых поясов. Вблизи границы перехода на летнее время использование смещений UTC может привести к катастрофически неверным результатам.
Даже помимо этого, некоторые неграмотные пользователи (т.е. бабушка) могут не знать, как установить часовой пояс своей локальной системы; или пользователи в туннельных сеансах или виртуальных машинах могут иметь «локальный» часовой пояс, который не установлен для их фактического предпочтения.
Гадание на политическом часовом поясе клиента на основе того, что вы знаете об этом клиенте (IP и т. Д.), Может быть неправильным и может быть довольно раздражающим, если у пользователя нет возможности переопределить предположение. Но для анонимных пользователей или регистрации новых пользователей я не вижу ничего плохого в использовании такого метода в качестве первоначального предположения, если вы даете пользователю какой-то способ изменить его, если он неправильный.
Моя рекомендация будет конкретно:
- Включить часовой пояс Олсона как часть любого профиля пользователя. Часовые пояса можно искать по стране, и это должно сделать выбор пользователя часового пояса относительно безболезненным. Дайте 0,01% пользователей, которым небезразличен выбор прямого UTC: -)
- Если вы заполните в профиле пользователя значение по умолчанию, основанное на IP-адресе, большую часть времени вы будете правы, если воспользуетесь хорошим сервисом поиска. Но позвольте пользователю изменить это, если это неправильно.
- Для анонимных пользователей предоставьте какой-нибудь виджет на любой странице, который отображает или вводит местное время, что позволяет им выбирать часовой пояс Олсона почти так же, как для профиля пользователя. Сохраните выбранное ими значение в файле cookie. По умолчанию UTC или предполагаемое значение, как указано выше.
При реализации веб-приложения, которое ранее требовалось для отображения меток времени в локализованном времени, я обнаружил, что не все клиенты корректно переводят UTC в местное время для прошлых и будущих дат. Я должен был выполнить все преобразования на стороне сервера. Для этого может потребоваться веб-служба, которая использует местное время и часовой пояс Олсона и возвращает время UTC.