Я бы рекомендовал не пытаться определить часовой пояс из почтового индекса пользователя.
Пользователю вопрос:
"Какой у вас почтовый индекс", скорее всего, не изменится очень часто.
Это изменится, но, вероятно, реже, чем вопрос "в каком часовом поясе вы находитесь".
Например, если пользователь путешествует куда-то, его почтовый индекс не изменился, но его часовой пояс изменился.
Если вы попытаетесь спросить «в каком почтовом индексе вы находитесь?», Пользователь, вероятно, не узнает, особенно если он или она путешествует.
Вместо этого я бы попытался выяснить, что такое часовой пояс напрямую.
Большинство платформ даст вам возможность сделать это.
Например, если вы пишете настольное программное обеспечение для .NET, вы можете сделать это с помощью
- Получение текущего часового пояса с использованием класса TimeZoneInfo или
- Отправка все время с сервера на клиент в UTC время, а затем использовать DateTime.ToLocal Time для преобразования времени UTC в местное время.
Или, если вы пишете веб-программное обеспечение, вы можете получить часовой пояс из веб-браузера пользователя с помощью Java Script и отправить его на сервер.
Посмотрите на следующие функции даты:
http://www.w3schools.com/jsref/jsref_obj_date.asp
Вы можете определить часовой пояс, используя различные функции даты.
Существует метод "getTimezoneOffset", но он не дает +/-. Так, например, он дал бы «1» для +1 и -1 по Гринвичу, что может быть проблемой.
Однако вы можете отправить с сервера известную дату, преобразовать ее в местное время, используя методы преобразования, а затем отправить результат обратно на сервер.
Когда вы отправляете известную дату вниз, вам, вероятно, следует отправить ее в виде миллисекундного смещения. Таким образом, вы можете избежать любых культурных проблем (даты по-разному форматируются в разных местах).
Существуют функции Win32, которые предоставляют вам часовой пояс, и я уверен, что, вероятно, Unix, Mac и Java APIS будут делать то же самое.