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

Каков часовой пояс по умолчанию в java.util.Date

Если я создаю новый объект Date(). Каким будет часовой пояс по умолчанию, который он будет печатать.

У меня работает моя машина в GMT. И я создаю новый объект Date(). Если я напечатаю, почему он показывает, что это 05 июля 08:21:05 PKT 2012. Как это занимает часовой пояс как PKT?

4b9b3361

Ответ 1

Сама дата не имеет никакого часового пояса. Его метод toString() использует текущий часовой пояс по умолчанию для возврата строки, представляющей эту дату:

Date date = new Date();

System.out.println(TimeZone.getDefault());
System.out.println(date);

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

System.out.println(TimeZone.getDefault());
System.out.println(date);

Выполнение вышеуказанного кода на моей машине приводит к следующему выводу:

sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
Fri Jul 06 09:24:45 CEST 2012
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Fri Jul 06 07:24:45 UTC 2012

Ответ 2

Ну, на самом деле базовые даты времени обычно являются агностиками часовых поясов, они не хранят часовые пояса. Чтобы использовать часовой пояс, вы используете форматирование, календари и тому подобное. Конечно, базовая дата должна быть в часовом поясе по умолчанию, каким бы он ни был (обычно GMT), иначе вы не сможете создать локальную дату из основного экземпляра даты.

В вашем конкретном случае это поможет изучить a) javadocs и b) в самом классе, поскольку JDK обычно распространяется с исходным кодом java.util.Date. Согласно javadoc, класс java.util.Date представляет собой число миллисекунд с момента стандартного базового времени, известного как "эпоха", а именно 1 января 1970 года, 00:00:00 GMT.

Если на вашей машине отображается другая дата, это значит, что ваша система будет печатать ее с использованием часового пояса по умолчанию для вашей системы. Однако вы можете распечатать его самостоятельно, используя любой другой часовой пояс.

Ответ 3

Если вы работаете под Linux, есть какой-то волшебный файл часового пояса где-то в системе. Для моего gentoo волшебство создавало текстовый файл /etc/timezone с контентом

Europe/Berlin

Самое забавное, что date все время давал правильное время и часовой пояс (CEST), но java отправил меня в Greenwhich.

> date
Thu Sep 18 08:49:14 CEST 2014