java.time
Ответ от BalusC хорош тем, что указывает на использование java.time.Но в этом ответе используется LocalDateTime
, где Instant
более уместно.A LocalDateTime
- это , а не момент на временной шкале, поскольку он намеренно не имеет понятия смещение от UTC или часовой пояс .
java.time
Фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют старые проблемные классы даты и времени, такие как java.util.Date
, .Calendar
и & java.text.SimpleDateFormat
.Команда Joda-Time также рекомендует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial .И найдите в Stack Overflow множество примеров и объяснений.
Большая часть функциональности java.time перенесена в Java 6 & 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP .
Instant
Момент на временной шкале в UTC с разрешением до наносекунд представленInstant
класс.
Instant instant = Instant.ofEpochSecond ( 1_320_105_600L );
Дамп на консоль.Ваше вводное значение - первый момент 1 ноября 2011 года в UTC .Z
в конце, сокращение от «зулу», означает UTC.
System.out.println ( "instant: " + instant );
мгновенное: 2011-11-01T00: 00: 00Z
ZonedDateTime
В ваших комментариях вы упоминаете о желании увидеть эту дату-время через объектив часового пояса America/Chicago
.Используйте правильное название часового пояса .Примените часовой пояс ZoneId
, чтобы получить объект ZonedDateTime
.Мы видим, что Чикаго на пять часов отстает от UTC на эту дату.
ZoneId zoneId = ZoneId.of ( "America/Chicago" );
ZonedDateTime zdt = instant.atZone ( zoneId );
zdt: 2011-10-31T19: 00-05: 00 [America / Chicago]
Строки
Вышеуказанные строки представлены в стандартном формате ISO 8601 .Для генерации строк в других форматах используйте класс DateTimeFormatter
.Вы можете указать свой собственный шаблон.Но обычно лучше всего разрешить java.time автоматически локализоваться на человеческий язык и культурные нормы, закодированные в объекте Locale
.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL );
formatter = formatter.withLocale ( Locale.US );
String output = zdt.format ( formatter );
Понедельник, 31 октября 2011 г. 7: 00: 00 PM CDT
Чтобы указать свой собственный формат, выполните поиск переполнения стека для множества примеров и дополнительных обсуждений.