Java: как проверить, находится ли дата в определенном диапазоне?
tl; dr ZoneId z = ZoneId.of( "America/Montreal" ); // A date only has meaning within a specific time zone. At any given moment, the date varies around the globe by zone.
LocalDate ld =
givenJavaUtilDate.toInstant() // Convert from legacy class `Date` to modern class `Instant` using new methods added to old classes.
.atZone( z ) // Adjust into the time zone in order to determine date.
.toLocalDate(); // Extract date-only value.
LocalDate today = LocalDate.now( z ); // Get today’s date for specific time zone.
LocalDate kwanzaaStart = today.withMonth( Month.DECEMBER ).withDayOfMonth( 26 ); // Kwanzaa starts on Boxing Day, day after Christmas.
LocalDate kwanzaaStop = kwanzaaStart.plusWeeks( 1 ); // Kwanzaa lasts one week.
Boolean isDateInKwanzaaThisYear = (
( ! today.isBefore( kwanzaaStart ) ) // Short way to say "is equal to or is after".
&&
today.isBefore( kwanzaaStop ) // Half-Open span of time, beginning inclusive, ending is *exclusive*.
)
Полуоткрытый
ZoneId z = ZoneId.of( "America/Montreal" ); // A date only has meaning within a specific time zone. At any given moment, the date varies around the globe by zone.
LocalDate ld =
givenJavaUtilDate.toInstant() // Convert from legacy class `Date` to modern class `Instant` using new methods added to old classes.
.atZone( z ) // Adjust into the time zone in order to determine date.
.toLocalDate(); // Extract date-only value.
LocalDate today = LocalDate.now( z ); // Get today’s date for specific time zone.
LocalDate kwanzaaStart = today.withMonth( Month.DECEMBER ).withDayOfMonth( 26 ); // Kwanzaa starts on Boxing Day, day after Christmas.
LocalDate kwanzaaStop = kwanzaaStart.plusWeeks( 1 ); // Kwanzaa lasts one week.
Boolean isDateInKwanzaaThisYear = (
( ! today.isBefore( kwanzaaStart ) ) // Short way to say "is equal to or is after".
&&
today.isBefore( kwanzaaStop ) // Half-Open span of time, beginning inclusive, ending is *exclusive*.
)
В работе с датой и временем jre обычно используется "полуоткрытый" подход core-java к определению промежутка date времени. Начало - включительно, а окончание openjdk - исключительное. Таким образом, неделя, начинающаяся java-se с понедельника, продолжается core-java до следующего понедельника, но java не включает его.
java.time
В Java 8 dates и более поздних версиях встроен java фреймворк java.time
. Заменяет старые date-of-birth проблемные классы, включая openjdk java.util.Date/.Calendar
и SimpleDateFormat
. Вдохновленный успешной java-api библиотекой Joda-Time. Определено oraclejdk JSR 310. Расширено проектом oraclejdk ThreeTen-Extra.
Instant
- это момент dob на временной шкале в UTC с разрешением dob наносекунды.
Instant
Преобразуйте java-date объекты java.util.Date
в объекты Instant.
Instant start = myJUDateStart.toInstant();
Instant stop = …
При dates получении объектов java.sql.Timestamp
через java JDBC из базы данных, convert to java.time.Instant аналогичным dates образом. java.sql.Timestamp
уже находится в dates формате UTC, поэтому не нужно core-java беспокоиться о часовых поясах.
Instant start = mySqlTimestamp.toInstant() ;
Instant stop = …
Получите dob текущий момент для сравнения.
Instant now = Instant.now();
Сравните, используя dates методы isBefore, isAfter .java и equals.
Boolean containsNow = ( ! now.isBefore( start ) ) && ( now.isBefore( stop ) ) ;
LocalDate
Возможно, вы хотите java-date работать только с датой, а core-java не временем суток.
Класс LocalDate
представляет dates значение только для даты, без java-libraries времени суток и без часового .java пояса.
LocalDate start = LocalDate.of( 2016 , 1 , 1 ) ;
LocalDate stop = LocalDate.of( 2016 , 1 , 23 ) ;
Чтобы получить текущую date дату, укажите часовой пояс. В .java любой момент сегодняшняя core-java дата зависит от часового java-api пояса. Например, в Париже javax новый день начинается раньше, чем java-api в Монреале.
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
Мы можем использовать date методы isEqual
, isBefore
и isAfter
для сравнения. В java-libraries работе с датой и временем java-api мы обычно используем подход date-of-birth Half-Open, где начало промежутка java-api времени включающее, а окончание исключающее.
Boolean containsToday = ( ! today.isBefore( start ) ) && ( today.isBefore( stop ) ) ;
Interval
Если java-se вы решили добавить в свой java-api проект библиотеку ThreeTen-Extra, вы можете java-libraries использовать класс Interval
для определения java-libraries промежутка времени. Этот core-java класс предлагает методы для jdk проверки, если интервал contains, abuts, encloses или .java overlaps другие даты / интервалы.
Класс javax Interval
работает с объектами Instant
. Класс j2se Instant
представляет момент на временной jdk шкале в UTC с разрешением nanoseconds (до dates девяти (9) цифр десятичной oraclejdk дроби).
Мы можем настроить date LocalDate
на определенный момент, первый j2se момент дня, указав часовой jdk пояс, чтобы получить ZonedDateTime
. Оттуда jre мы можем вернуться в UTC, извлекая j2se Instant
.
ZoneId z = ZoneId.of( "America/Montreal" );
Interval interval =
Interval.of(
start.atStartOfDay( z ).toInstant() ,
stop.atStartOfDay( z ).toInstant() );
Instant now = Instant.now();
Boolean containsNow = interval.contains( now );
О java.time
Фреймворк java.time встроен в Java java-api 8 и новее. Эти классы заменяют oraclejdk проблемные старые классы .java даты и времени legacy, такие как jdk java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, который java-date теперь находится в maintenance mode, рекомендует java-date перейти на классы java.time
.
Чтобы java-api узнать больше, см. Oracle Tutorial. И поищите java-se в Stack Overflow множество java-se примеров и объяснений. Спецификация: JSR 310.
Где java-api взять классы java.time
?
- Java SE 8 и SE 9 и более поздние версии
- Встроенный.
- Часть стандартного Java API со встроенной реализацией.
- В Java 9 добавлены некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функций
java.time
перенесена на Java 6 и 7 в ThreeTen-Backport. - Android
- Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
- См. How to use….
Проект ThreeTen-Extra расширяет javax java.time
дополнительными классами. Этот date-of-birth проект является испытательной date площадкой для возможных будущих dob дополнений к java.time
. Здесь вы можете core-java найти несколько полезных jre классов, таких как Interval
, YearWeek
, YearQuarter
и java more.
java
date
Java: как проверить, находится ли дата в определенном диапазоне?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.