Java Дата начала эпохи

Класс java.util.Date основан на количестве секунд с 00:00 по Гринвичу 1 января 1970 года. Итак, почему этот код

System.out.println(new Date(0));

напечатать Thu Jan 01 01:00:00 GMT 1970? Мой местный часовой пояс — GMT, поэтому я ожидал, что он напечатает 00:00:00 GMT.


person DodgyCodeException    schedule 23.02.2018    source источник
comment
проблема с летним временем? какой у тебя часовой пояс?   -  person hd1    schedule 23.02.2018
comment
Не ДСТ. Я в Великобритании.   -  person DodgyCodeException    schedule 23.02.2018
comment
Я воспроизвел Thu Jan 01 01:00:00 GMT 1970 на своей Java 9 после установки часового пояса моей JVM на Европу/Лондон.   -  person Ole V.V.    schedule 25.02.2018


Ответы (3)


На это есть интересная причина. См. (отчет об ошибке BST Offset) . В нем говорится: «И эксперимент с британским стандартным временем с 1968 по 1972 год, в результате которого время в течение года опережало время по Гринвичу на один час». И далее: «Местное время, выдаваемое Date.toString(), исторически верно, за исключением аббревиатуры часового пояса. Это должно быть «BST» (британское стандартное время в данном случае), но это известное ограничение текущей реализации TimeZone».

person CGS    schedule 23.02.2018
comment
Фантастические правила напоминают действительности. - person Joop Eggen; 23.02.2018
comment
Интересный кусочек истории, но он не объясняет, почему отображается 1:00 по GMT. Ваш ответ объяснил бы отображение BST, но это не то, о чем сообщает Вопрос. - person Basil Bourque; 24.02.2018
comment
@BasilBourque, правильно, я отредактировал ответ. Интересно, что ошибка есть и в современном API. Instant.EPOCH.atZone(ZoneId.of("Europe/London")).format(DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT)) тоже производит Thu Jan 01 01:00:00 GMT 1970 на моей Java 9. - person Ole V.V.; 25.02.2018

Это ссылка может помочь. Я совсем новичок в классе Date, но я подумал, что это может как-то помочь.

person Robo Mop    schedule 23.02.2018
comment
PS: Я хотел прокомментировать это, но кто-нибудь может сказать мне, как добавлять ссылки в комментариях? Я действительно тупой :Р - person Robo Mop; 23.02.2018
comment
Да. Щелкните ссылку «Помощь» рядом с текстовым полем комментария. Страница расширится и покажет вам, как что-то делать, включая добавление ссылок, пока вы все еще печатаете в поле для комментариев. - person DodgyCodeException; 23.02.2018
comment
@DodgyCodeException Спасибо! - person Robo Mop; 24.02.2018

Время эпохи Unix — это система времени, описывающая, сколько времени прошло с 1 января 1970 года.

Поэтому, когда вы создаете новый объект java.util.Date с прошедшим 0 миллисекунд, он вернет 1 января 1970 года.

То, что вы ищете, находится здесь.

person Austin Schäfer    schedule 23.02.2018
comment
Я не понимаю. Если прошло ноль миллисекунд, то почему будет отображаться час ночи? - person Robo Mop; 23.02.2018