Каков часовой пояс по умолчанию в java.util.Date
Если я создаю новый объект Date(). Каким будет часовой пояс по умолчанию, который он будет печатать.
У меня работает моя машина в GMT. И я создаю новый объект Date(). Если я напечатаю, почему он показывает, что это 05 июля 08:21:05 PKT 2012. Как это занимает часовой пояс как PKT?
Ответы
Ответ 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