- Никогда не используйте ужасный класс
Calendar
. - Современный подход использует классы java.time .
LocalDate
Разобрать три целых числа в качестве даты.Захватите исключение, выданное, если ввод недействителен, если такая дата не существует.Используйте LocalDate
для значения только на дату без времени суток и без часового пояса.
try {
LocalDate ld = LocalDate.of( y , m , d ) ;
} catch ( DateTimeException e ) {
… handle invalid input …
}
DayOfWeek
Передайте ожидаемый день-недели с использованием перечисления DayOfWeek
, такого как DayOfWeek.MONDAY
.
DayOfWeek dow = DayOfWeek.MONDAY ; // Passed into your test.
if( ld.getDayOfWeek().equals( dow ) ) { … }
Преобразование
Если вы должны взаимодействовать со старым кодомеще не обновлен до java.time , вы можете конвертировать туда и обратно.Вызовите новые методы преобразования, добавленные к старым классам.
Если вам нужно Calendar
, GregorianCalendar
, более конкретно, нам нужно времядень и часовой пояс.
Возможно, вы захотите использовать первый момент дня.Никогда не предполагайте, что день начинается в 00:00:00.Аномалии, такие как переход на летнее время (DST), означают, что день может начаться в другое время, например 01:00:00.Пусть java.time определяет первый момент.
Укажите правильное имя часового пояса в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
.Никогда не используйте 3-4-буквенное сокращение, например EST
или IST
, так как они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
Теперь преобразуйте.
Calendar c = GregorianCalendar.from( zdt ) ; // Convert from modern class to legacy class. Do so only if absolutely required; otherwise, avoid the legacy date-time classes like the Plague.
О 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
и еще .