ну так правильно их же двоеКак перестать думать о часовых поясах и начать жить
В вашей системе время играет важную роль? Ваши пользователи/компоненты распределены по территории всего земного шара, или хотя бы нашей необъятной родины? Значит, вам нужны часовые пояса. Что ж, это просто. Самое сложное, что вам придется сделать — не запутаться. Об этом мы с вами и поговорим. Для начала вам нужно научиться правильно думать. Думая правильно, все остальное будет для вас либо самоочевидным, либо достаточно простым.
Начнем с часов. Все мы привыкли определять время, глядя на часы на стене. При работе с часовыми поясами такое время называется Wall clock time . В принципе, ничего плохого в нем нет, только в разных местах земного шара в один и тот же момент времени часы показывают разное время.
Как на этой фотографии!!! Если задаться целью, можно придумать алгоритм перевода wall clock time одного часового пояса в wall clock time другого. Обычно надо прибавить/отнять разницу в часах между часовыми поясами, кроме (внимание) моментов перехода на летнее/зимнее время. Вот когда начинается переход, вычисления становятся по-настоящему сложными.
Нам же нужно что-то простое и пуленепробиваемое, как… целое число. Так появилось понятие момента во времени (instant in time, Unix time, POSIX time, time since (unix) epoch), который представляет собой число секунд (в Java — миллисекунд), прошедших с 1 января 1970 года, 00:00:00 по GMT. Момент времени одинаков по всему земному шару — если представить, что в кто-то нажал на «паузу» и течение времени остановилось, число, соответствующее моменту времени по всей Земле будет одно и то же, независимо от часового пояса. Если бы кто-то нажал на паузу через час после того, как на Гринвиче наступил новый 1970 год, момент во времени по всей Земле показывал бы 3 600,000. А сейчас, например, это уже число 1 280 720 431,859.
Итак, момент во времени — это универсальная конвертируемая валюта временных вычислений. Он зависит только от, хм, времени, моменты можно сравнивать (соответственно, определять, какое из событий произошло раньше, а какое позже), и в этом не участвует никакая ерунда, связанная с географическим положением, часовыми поясами и переводами часов, что кардинально повышает надежность таких вычислений. Собственно, так реализована работа со временем в Java (с версии 1.1), где java.util.Date представляет собой обертку над long-моментом во времени (датам ранее 1970 соответствуют отрицательные long-и), является Comparable, а все человеческо-календарные преобразования вынесены в отдельные классы Calendar и DateFormat.
