tl; dr
Используйте современные классы, в частности LocalDate
.
LocalDate // Represent a date-only value without a time-of-day and without a time zone or offset-from-UTC.
.parse(
"21/01/1966" , // String in some localized format.
DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) // Specify formatting pattern to match input string.
) // Returns a `LocalDate` object.
.isBefore( // Compare one `LocalDate` to another.
LocalDate.EPOCH // 1970-01-01
) // Returns a boolean.
true
java.time
Используйте только современные java.time классы, никогда SimpleDateFormat
или Calendar
.
LocalDate
Класс LocalDate
представляет значение только для даты без времени суток и без часового пояса или смещение от UTC .
Синтаксический анализ
Определение шаблона форматирования для соответствия вашей входной строке.
String input = "01/01/1970" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate limit = LocalDate.parse( input , f ) ;
Текущая дата
Получить сегодняшнюю дату.
Часовой пояс имеет решающее значение при определении даты.В любой момент времени дата меняется по всему земному шару в зависимости от зоны.Например, через несколько минут после полуночи в Париж Франция - это новый день, в то время как "вчера" в Монреаль Квебек .
Если часовой пояс не указан,JVM неявно применяет свой текущий часовой пояс по умолчанию.Это значение по умолчанию может измениться в любой момент во время выполнения (!), Поэтому ваши результаты могут отличаться.Лучше явно указать в качестве аргумента [желаемый / ожидаемый часовой пояс] [2].
Укажите правильное имя часового пояса в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
.Никогда не используйте 2-4 буквенные сокращения, такие как EST
или IST
, так как они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
Если вы хотите использовать текущий часовой пояс JVM по умолчанию, запросите его и передайте в качестве аргумента.Если опущено, текущее значение по умолчанию JVM применяется неявно.Лучше быть явным, поскольку значение по умолчанию может быть изменено в любой момент во время выполнения любым кодом в любом потоке любого приложения в JVM.
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
Сравнить
boolean isBeforeLimit = today.isBefore( limit ) ; // Returns false.
О java.time
Среда java.time встроена в 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 .