таким образом, это сработало бы, даже если TestDate был точно равен одному из конечных значений.
Ответ 2
tl; dr
ZoneIdz= 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. LocalDateld= 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.
LocalDatetoday= LocalDate.now( z ); // Get today’s date for specific time zone. LocalDatekwanzaaStart= today.withMonth( Month.DECEMBER ).withDayOfMonth( 26 ); // Kwanzaa starts on Boxing Day, day after Christmas. LocalDatekwanzaaStop= kwanzaaStart.plusWeeks( 1 ); // Kwanzaa lasts one week. BooleanisDateInKwanzaaThisYear= ( ( ! 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*. )
Полуоткрыто
При работе с датой и временем обычно используется "полуоткрытый" подход к определению промежутка времени. Начало является включающим, а окончание - исключающим. Таким образом, неделя, начинающаяся с понедельника, длится до следующего понедельника, но не включает его.
java.time
Java 8 и более поздних версий поставляется со встроенным java.time фреймворком. Заменяет старые проблемные классы, включая java.util.Date/.Calendar и SimpleDateFormat. Вдохновлен успешной библиотекой Joda-Time. Определено в JSR 310. Расширено проектом ThreeTen-Extra.
An Instant - это момент на временной шкале в UTC с разрешением в наносекунду.
Instant
Преобразуйте ваши java.util.Date объекты в Instant objects.
При получении java.sql.Timestamp объектов через JDBC из базы данных, преобразуйте в java.time.Instant аналогичным образом. A java.sql.Timestamp уже находится в UTC, поэтому не нужно беспокоиться о часовых поясах.
Чтобы получить текущую дату, укажите часовой пояс. В любой данный момент сегодняшняя дата зависит от часового пояса. Например, в Париже новый день наступает раньше, чем в Монреале.
Мы можем использовать методы isEqual, isBefore и isAfter для сравнения. При работе с датой и временем мы обычно используем полуоткрытый подход, при котором начало промежутка времени является включительным, а окончание - исключительным.
Если вы решили добавить в свой проект библиотеку ThreeTen-Extra, вы могли бы использовать Interval класс для определения промежутка времени. Этот класс предлагает методы для проверки, содержит интервал, примыкает, заключает или перекрывает другие даты / интервалы.
Interval Класс работает с Instant объектами. Instant Класс представляет момент на временной шкале в UTC с разрешением в наносекунды (до девяти (9) цифр десятичной дроби).
Мы можем настроить LocalDate на определенный момент, первое мгновение дня, указав часовой пояс, чтобы получить ZonedDateTime. Оттуда мы можем вернуться к UTC , извлекая Instant.
ZoneIdz= ZoneId.of( "America/Montreal" ); Intervalinterval= Interval.of( start.atStartOfDay( z ).toInstant() , stop.atStartOfDay( z ).toInstant() ); Instantnow= Instant.now(); BooleancontainsNow= interval.contains( now );
Проект ThreeTen-Extra расширяется java.time дополнительными классами. Этот проект является испытательным полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval, YearWeek, YearQuarter и больше.
Ответ 3
Это правильный способ. Календари работают точно так же. Лучшее, что я мог бы вам предложить (на основе вашего примера), это:
Date.getTime() возвращает количество миллисекунд, прошедших с 1/1/1970 00:00:00 GMT, и является длительным, поэтому его легко сопоставить.
Ответ 4
Рассмотрите возможность использования Joda Time. Мне нравится эта библиотека, и я бы хотел, чтобы она заменила текущий ужасный беспорядок, который представляют собой существующие классы даты и календаря Java. Обработка даты выполнена правильно.
РЕДАКТИРОВАТЬ: сейчас уже не 2009 год, а Java 8 давно отсутствует. Используйте классы Java 8, встроенные в java.time, которые основаны на времени Joda, как упоминал Бэзил Бурк выше. В этом случае вам понадобится класс Period, и вот руководство Oracle по его использованию.