java.time
Среда java.time, встроенная в Java 8 и более поздние версии, вытесняет как старые классы даты и времени, связанные с ранними версиями Java, так и библиотеку Joda-Time. Классы java.time были перенесены обратно на Java 6 и 7 и на Android.
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд.
Instant instant = Instant.now();
Применить смещение от UTC (количество часов и возможных минут и секунд), чтобы получить OffsetDateTime
.
ZoneOffset offset = ZoneOffset.of( "-04:00" );
OffsetDateTime odt = OffsetDateTime.ofInstant( instant , offset );
Еще лучше применение полного часового пояса, который является смещением, плюс набор правил для обработки аномалий, таких как летнее время (DST).
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
База данных
Надеемся, что драйверы JDBC будут обновлены для работы непосредственно с
классы java.time. До этого мы должны использовать классы java.sql для перемещения значений даты и времени в / из базы данных. Но ограничьте свое использование классов java.sql рутинной передачей базы данных. Не используйте их для бизнес-логики. Как часть старых классов даты и времени они плохо разработаны, сбивают с толку и создают проблемы.
Используйте новые методы, добавленные к старым классам, для преобразования в / из java.time. Ищите to…
и valueOf
методы.
Используйте класс java.sql.Timestamp
для значений даты и времени.
java.sql.Timestamp ts = java.sql.Timestamp.valueOf( instant );
И идет в другом направлении ...
Instant instant = ts.toInstant();
Для данных даты и времени вам практически всегда нужен тип данных TIMESTAMP WITH TIME ZONE
вместо WITHOUT
при проектировании столбцов таблицы в вашей базе данных.