DateFormat печатает новую дату (0) как эпоху + 1 час - PullRequest
6 голосов
/ 13 сентября 2011

Следующий тест не пройден:

DateFormat df = new SimpleDateFormat("HH:mm:ss z");
assertEquals("00:00:00 GMT", df.format(new Date(0)));

ожидается "00:00:00 GMT", но было "01:00:00 GMT"

Может кто-тоукажите, где я глуп, пожалуйста?

Я потратил на это больше времени, чем на то, чтобы просто заменить все на Joda-Time.Там где-то есть урок.

Ответы [ 2 ]

11 голосов
/ 13 сентября 2011

Проблема в том, что у Java есть ошибка, связанная с названием аббревиатуры часового пояса Европы / Лондона в 1970 году.

Зимой 1970 года Великобритания все еще использовала UTC + 1 - но Java считает, что этодо сих пор называется "GMT".Итак, вы видите местное время в полночь UTC 1 января 1970 года ... просто мы привыкли к GMT = UTC, поэтому это сбивает с толку.

(Как примечание, все еще стоило бы перейти на Joda Time даже сейчас. Избегайте встроенных библиотек, таких как чума:)

Joda Time печатает аббревиатуру часового пояса как "BST".Это кажется столь же странным, учитывая, что оно явно не было летним временем ... но вполне возможно, что "S" здесь стандарты для Стандарта, как это было в период "Британского стандартного времени эксперимента".См. Википедия для подробностей.

(Обратите внимание, что сам UTC даже не существовал в эпоху Unix - он был введен в 1972 году. Я предполагаю, что ради этого UTC используется в качестве пролетикаответ:)

0 голосов
/ 13 сентября 2011

new Date (0) возвращает Выделение объекта Date и инициализация его для представления указанного количества миллисекунд со стандартного базового времени, известного как «эпоха», а именно 1 января 1970 года, 00:00.: 00 по Гринвичу.

Значит, будет четверг 01 января 05:30:00 IST 1970

"05:30:00" Зависит от вашего местоположения

...