tl; dr
Избегать устаревших классов даты и времени
Унаследованные классы, такие как Date
& Calendar
являются ужасными , созданными людьми, которые не понимали обработку даты и времени. Эти классы были вытеснены несколько лет назад современными java.time классами, определенными в JSR 310.
java.time
*Класс 1039 * заменяет класс Date
, оба представляют момент в UTC (смещение нуля часов-минут-секунд).
Instant instant = Instant.now() ; // Capture the current moment in UTC.
Класс Calendar
или, точнее, его наиболее часто используемый подкласс бетона GregorianCalendar
заменен на ZonedDateTime
.
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ; // Capture the current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
Преобразование
Лучше всего полностью избегать устаревших классов даты и времени. Но иногда вам может потребоваться взаимодействие со старым кодом, который еще не обновлен до java.time . В этом случае, конвертировать. Посмотрите на новые to…
/ from…
методы преобразования, добавленные к старым классам.
Calendar calendar = GregorianCalendar.from( zdt ) ;
… и…
ZonedDateTime zdt = ( ( GregorianCalendar ) calendar ).toZonedDateTime() ;
Back-port
The *Классы 1074 * java.time встроены в Java 8 и более поздние версии, а также в Android 26 и более поздние.
Для Java 6 и 7 используйте задний порт, найденный в проекте ThreeTen-Backport . Большая часть функциональности java.time находится там. Этот проект возглавляет тот же человек, который возглавляет проект java.time и JSR 310, Стивен Коулборн .
Для Android до 26, используйте адаптацию этого-порт на Android, проект ThreeTenABP .