Подтвердить что ты не робот

Является ли java.util.Date использованием TimeZone?

У меня есть два разных компьютера, каждый с разным TimeZone.

В одном компьютере im печатайте System.currentTimeMillis(), а затем печатает на обеих компьютерах следующую команду: System.out.println(new Date(123456)); → 123456 означает, что номер пришел в currentTimeMillis на компьютере # 1.

Второй вывод (хотя и напечатанный жестко запрограммированный) приводит к разным отпечаткам на обоих компьютерах. почему это?

4b9b3361

Ответ 1

Как насчет некоторых деталей педантизма.

java.util.Date не зависит от времени. Это так правильно в javadoc.

Вы хотите что-то по отношению к определенному часовому поясу? Это java.util.Calendar.

Трудная часть? Когда вы печатаете этот материал (java.text.DateFormat или подкласс), который включает Календарь (который включает часовой пояс). См. DateFormat.setTimeZone().

Он уверен, что выглядит (не проверял реализацию), как java.util.Date.toString() проходит через DateFormat. Таким образом, даже наш (в основном) не зависящий от времени класс становится перепутанным с часовыми поясами.

Хотите получить этот материал часового пояса из наших чистых объектов без зонирования? Там Date.toGMTString(). Или вы можете создать свой собственный SimpleDateFormatter и использовать setTimeZone() для управления тем, какая зона используется самостоятельно.

Ответ 2

Потому что этот миллисекунд - это число миллисекунд, прошедшее 1/1/1970 UTC. Если вы затем переведете другой часовой пояс, отображаемое время будет другим.

например. 123456 может соответствовать полдень в Гринвиче (UTC). Но в Нью-Йорке это будет другое время.

Чтобы подтвердить это, используйте SimpleDateFormat с выводом часового пояса и/или измените часовой пояс на втором компьютере, чтобы он соответствовал первому.

Ответ 3

почему?

Потому что что-то вроде "4 октября 2009 года, 14:20" бессмысленно, не зная того времени, на который он ссылается, - который вы, скорее всего, увидите прямо сейчас, потому что это мое время, когда я пишу это, и, вероятно, оно отличается на несколько часов от вашего времени, хотя это тот же момент времени.

Временные метки компьютеров обычно измеряются в формате UTC (в основном часовой пояс в Гринвиче, Англия), и часовой пояс должен учитываться при форматировании их в нечто читаемое человеком.

Ответ 4

javadoc объясняет это хорошо, System.currentTimeMillis() Обратите внимание, что хотя единица времени возвращаемого значения равна миллисекунде, степень детализации зависит от базовой операционной системы и может быть больше. Например, многие операционные системы измеряют время в единицах десятков миллисекунд.