Избегайте устаревших классов даты и времени
Никогда не используйте java.util.Date
class. Этот ужасный класс вместе с Calendar
& SimpleDateFormat
и другими теперь унаследован.Новые методы преобразования to
/ from
, добавленные в старые классы, предназначены только для использования при взаимодействии со старым кодом, который еще не обновлен до java.time .По возможности избегайте Date
.
Среди многих недостатков в Date
- неудачное поведение динамического применения текущего часового пояса JVM по умолчанию при генерации текста в его методе toString
.Таким образом, кажется, что Date
имеет часовой пояс, в то время как на самом деле Date
представляет момент в UTC. Другими словами, Date::toString
ложь. Одна из многих причин избегать этого класса.
➥ Зимой 2017 года многие часовые пояса наВосточное побережье Северной Америки отстает от UTC на пять часов.Таким образом, полночь в UTC - это одновременно в 7 часов вечера (19:00) в Нью-Йорке, Монреале и т. Д. Тот же самый момент, разное время настенных часов.*
Класс Date
был вытеснен Instant
лет назад.
ZonedDateTime is say time = "2017-01-03T00: 00Z [UTZ]"
Если вы пытаетесь отслеживать моменты в UTC , используйте:
Используйте класс ZonedDateTime
, когда у вас есть момент в контексте часового пояса. часовой пояс - это история прошлых, настоящих и будущих изменений в offset-from-UTC , используемых людьми определенного региона.
ZonedDateTime.now(
ZoneId.of( "Africa/Tunis" )
)
Вы можете настроить между UTC и зоной.Один и тот же момент, разные способы его просмотра, разное время настенных часов.
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Pacific/Auckland" ) ) ;
… и…
Instant instant = zdt.toInstant() ;
![Table of date-time types in Java, both modern and legacy](https://i.stack.imgur.com/ULMfR.png)
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java.time классы.
Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .