Ответ Джона Скита правильный.
java.time
Давайте запустим тот же самый ввод через java.time, чтобы увидеть результаты.
Укажите правильное имя часового пояса . Никогда не используйте 3-4-буквенное сокращение, такое как BST
, EST
или IST
, поскольку они не являются истинными часовыми поясами, не стандартизированы и даже не уникальны (!). Поэтому мы используем Europe/London
.
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд .
String input = "1302805253";
long millis = Long.parseLong ( input );
Instant instant = Instant.ofEpochMilli ( millis );
Применение часового пояса для создания объекта ZonedDateTime
.
ZoneId zoneId = ZoneId.of ( "Europe/London" );
ZonedDateTime zdt = instant.atZone ( zoneId );
Дамп на консоль. Мы действительно видим, что Europe/London
время на час впереди UTC в тот момент. Таким образом, время суток составляет 02
часа, а не 01
часов. Оба представляют один и тот же момент времени на временной шкале, только если смотреть через линзы двух разных настенных часов .
System.out.println ( "input: " + input + " | instant: " + instant + " | zdt: " + zdt );
вход: 1302805253 | мгновенный: 1970-01-16T01: 53: 25.253Z | zdt: 1970-01-16T02: 53: 25.253 + 01: 00 [Европа / Лондон]
целых секунд
Кстати, я подозреваю, что ваша входная строка представляет целых секунд со времени 1970 UTC, а не миллисекунд . Интерпретировано, что в качестве секунд мы получаем дату в 2011 году, в месяц, когда этот вопрос был опубликован.
String output = Instant.ofEpochSecond ( Long.parseLong ( "1302805253" ) ).atZone ( ZoneId.of ( "Europe/London" ) ).toString ();
2011-04-14T19: 20: 53 + 01: 00 [Europe / London]
О java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют старые проблемные классы даты и времени, такие как java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
.
Проект Joda-Time , который сейчас находится в режиме обслуживания , рекомендует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений.
Большая часть функций java.time перенесена в Java 6 & 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP .
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time.