Tl; дг
Instant.now()
Избегайте классов наследство даты и времени
Вы используете неприятные старые классы времени, теперь устаревшие, вытесненные классами java.time. Унаследованные классы - ужасный беспорядок, плохо спроектированный, запутанный и ошибочный. Избежать их.
Instant
Instant
класс представляет момент на временной шкале в UTC с разрешением nanoseconds (до девяти (9) цифр десятичной дроби).
Instant instant = Instant.now();
instant.toString(): 2017-02-23T03: 30: 58.431Z
Формат этой строки, генерируемого toString
является стандартным форматом ISO 8601. Z
на конце короткий для Zulu
и означает UTC.
Все, все готово.
ZonedDateTime
Если вы хотите увидеть тот же момент, что и wall-clock time некоторой конкретной области, а затем применить ZoneId
получить ZonedDateTime
.
Указать proper time zone name в формате continent/region
, такие как America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте аббревиатуру 3-4 буквы, такую как EST
или IST
, так как они не настоящие часовые пояса, не стандартизированные, и даже не уникальные (!).
ZoneId z = ZoneId.of("Asia/Kolkata");
ZonedDateTime zdt = instant.atZone(z);
zdt.toString(): 2017-02-23T09: 00: 58,431 + 05: 30 [Азия/Калькутта]
Индия пять с половиной часов больше, чем в UTC. Поэтому, когда настроен на часовой пояс Asia/Kolkata
, обратите внимание, как время суток перескакивает от 03:30
до 09:00
.
О java.время
Рамка java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8 и SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
- Android
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
, andfz more.
И почему они не должны? вы форматируете ту же дату ('cal.getTime()'), используя тот же (по умолчанию) часовой пояс. Так что это нормально, чтобы получить тот же результат. Чего вы пытаетесь достичь? –
Но, я хочу время UTC. Поскольку я упоминал часовой пояс, он должен показывать время UTC. –
Единственное отличие между вашими заявлениями печати состоит в том, что один из них получает некоторое строковое форматирование - ничего о дате фактически не изменилось. – csmckelvey