Использование java.time
Вы должны использовать классы java.time, а не назойливых старых классов даты и времени, такие как Calendar
, чем теперь наследие.
Обязательно прочитайте документ класса для ZonedDateTime
, чтобы понять его выбор того, как обращаться с вырезами на летнее время (DST).
Указать proper time zone name в формате continent/region
, такие как America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте аббревиатуру 3-4 буквы, такую как EST
или EDT
или IST
, так как они не настоящие часовые пояса, не стандартизированные, и даже не уникальные (!).
ZoneId z = ZoneId.of("America/New_York");
// of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond, ZoneId zone)
ZonedDateTime zdt = ZonedDateTime.of(2016 , 11 , 6 , 1 , 26 , 16 , 0 , z);
ZonedDateTime zdtOneHourEarlier = zdt.minusHours(1);
ZonedDateTime zdtOneHourLater = zdt.plusHours(1);
Обратите внимание на смещение-по-UTC в каждом результате.
zdt.toString(): 2016-11-06T01: 26: 16-04: 00 [Америка/New_York]
zdtOneHourEarlier.toString(): 2016-11-06T00: 26: 16- 4:00 [Америка/New_York]
zdtOneHourLater.toString(): 2016-11-06T01: 26: 16-05: 00 [Америка/New_York]
Смотрите этот код run live at IdeOne.com.
О java.time
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
и more.