tl; dr
LocalDate // Represent a date-only, without a time-of-day and without a time zone.
.now() // Capture the current date, as seen through your JVM’s current default time zone. Better to pass a `ZoneId` as the optional argument.
.plusDays( 5 ) // Add five days, returning a new `LocalDate` object. Per the Immutable Objects pattern, a new object is produced rather than changing (“mutating”) the original.
.format( // Generate text representing the date value of our `LocalDate` object.
DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) // Define a formatting pattern to suit your taste. Or call the `.ofLocalized…` methods to localize automatically.
) // Returns a `String`.
java.time
Date
класс представляет момент в UTC, дату с временем суток и смещение отUTC ноль.Неправильный класс для использования со значениями только для даты.
Избегайте использования ужасных старых устаревших классов даты и времени, таких как Calendar
, Date
и SimpleDateFormat
.Эти классы были вытеснены несколько лет назад классами java.time .
Не отслеживать дни как количество секунд или миллисекунд.Дни не всегда 24 часа, а годы не всегда 365 дней.
LocalDate
Вместо этого используйте LocalDate
класс.
LocalDate today = LocalDate.now() ;
LocalDate later = today.plusDays( 5 ) ;
Преобразование
Лучшее в Избегайте старых классов в целом.Но если вам необходимо взаимодействовать со старым кодом, который еще не обновлен до java.time классов, вы можете конвертировать туда и обратно.Вызовите новые методы, добавленные к старым классам.
Для Date
вам нужно добавить время суток.Я ожидаю, что вы захотите пойти с первого момента дня.И я предполагаю, что вы хотите поместить дату в формате UTC, а не в часовой пояс.Мы должны пройти через объект OffsetDateTime
, чтобы добавить время суток и смещение.Для смещения мы используем константу ZoneOffset.UTC
.Затем мы извлекаем более простой объект класса Instant
для преобразования в java.util.Date
.
OffsetDateTime odt = OffsetDateTime.of( later , LocalTime.MIN , ZoneOffset.UTC ) ; // Combine the date with time-of-day and with an offset-from-UTC.
Instant instant = odt.toInstant() ; // Convert to the more basic `Instant` class, a moment in UTC, always UTC by definition.
java.util.Date d = java.util.Date.from( instant ) ; // Convert from modern class to legacy class.
Идя в другом направлении:
Instant instant = d.toInstant() ; // Convert from legacy class to modern class.
О java.time
java.time Framework встроен в Java 8 и более поздние версии.Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .