- Классы Date, Calendar, DateFormat
- Calendar
- GregorianCalendar
- TimeZone
- SimpleTimeZone
- Класс DateFormat
- Класс SimpleDateFormat
- Как сравнить даты в Java
- 1. Сравните две даты
- 1.1 Дата.Сравнение
- Лучший способ сравнить даты на Android
- 15 ответов
- Joda времени
- LocalDate
- Часовой пояс
- Java.time и ThreeTenABP
- Вопрос: Могу ли я использовать java.time на Android?
- Ссылки
- Сравнить две даты в Java
- 14 ответов
- java.время
- о java.время
Классы Date, Calendar, DateFormat
Класс Date предназначен для работы с текущими датой и временем и позволяет отталкиваться от них для решения своих задач. При выходе новых версий Java часть методов класса была перемещена в классы Calendar и DateFormat.
При импорте выбирайте java.util.Date, а не java.sql.Date.
У класса есть два конструктора:
Первый конструктор без параметров инициализирует объект текущей датой и временем. Во втором конструкторе вы можете указать количество миллисекунд, прошедших с полуночи 1 января 1970 года.
- boolean after(Date date) — если объект класса Date содержит более позднюю дату, чем указано в параметре, то возвращается true
- boolean before(Date date) — если объект класса Date содержит более раннюю дату, чем указано в параметре, то возвращается true
- int compareTo(Date date) — сравнивает даты. Возвращает 0, если совпадают, отрицательное значение — если вызывающая дата более ранняя, положительное значение — если вызывающая дата более поздняя, чем в параметре
- boolean equals(Object object) — если даты совпадают, то возвращается true
- long getTime() — возвращает количество миллисекунд, прошедших с полуночи 1 января 1970 года
- void setTime(long milliseconds) — устанавливает время и дату в виде числа миллисекунд, прошедших с полночи 1 января 1970 года.
Если вы посмотрите документацию, то увидите, что существует множество методов для получения или установки отдельных компонентов времени и даты, например, getMinutes()/setMinutes() и др. Все они являются устаревшими и вместо них следует использовать класс Calendar.
Простой пример вывода даты на экран.
С помощью метода getTime() можно отобразить количество миллисекунд, прошедших с 1 января 1970 года. Обновим пример
Calendar
Абстрактный класс Calendar позволяет преобразовать время в миллисекундах в более удобном виде — год, месяц, день, часы, минуты, секунды. Существуют также подклассы, например, GregorianCalendar.
Переменная типа boolean под именем areFieldsSet указывает, были установлены компоненты времени. Переменная fields — это массив целочисленных значений, содержащий компоненты времени. Переменная isSet — массив типа boolean, указывающий, был ли установлен специфический компонент времени. Переменная time (тип long) содержит текущее время объекта. Переменная isTimeSet (тип boolean) указывает, что было установлено текущее время.
У класса много методов. Вкратце опишем часть из них:
- abstract void add(int field, int value) — добавляет value к компоненту времени или даты, указанному в параметре field (например, Calendar.HOUR). Чтобы отнять, используйте отрицательное значение.
- boolean after(Object calendar) — возвращает значение true, если вызывающий объект класса Calendar содержит более позднюю дату, чем calendar.
- boolean before(Object calendar) — возвращает значение true, если вызывающий объект класса Calendar содержит более раннюю дату, чем calendar.
- final void clear() — обнуляет все компоненты времени в вызывающем объекте.
- final void clear(int field) — обнуляет компонент, указанный в параметре field
- int get(int field) — возвращает значение одного компонента, например, Calendar.MINUTE
- synchronized static Locale[] getAvailableLocales() — возвращает массив объектов класса Locale, содержащий региональные данные
- synchronized static Calendar getInstance() — возвращает объект класса Calendar для региональных данных и часового пояса по умолчанию. Есть и другие перегруженные версии.
- final Date getTime() — возвращает объекта класса Date, содержащий время, эквивалентное вызывающему объекту
- TimeZone getTimeZone() — возвращает часовой пояс
- final boolean isSet(int field) — возвращает значение true, если указанный компонент времени указан.
- void set(int field, int value) — устанавливает компоненты даты или времени. Есть перегруженные версии
- final void setTime(Date date) — устанавливает различные компоненты даты и времени через объект класса Date
- void setTimeZone(TimeZone timezone) — устанавливает часовой пояс через объект класса TimeZone
Также в календаре определены много различных констант: AUGUST и другие месяцы, SATURDAY и другие дни недели, HOUR и т.д.
GregorianCalendar
Класс GregorianCalendar является подклассом Calendar, который представляет обычный Григорианский календарь. Метод getInstance() класса Calendar обычно возвращает объект класса GregorianCalendar, инициированный текущей датой и временем согласно региональным настройкам.
У класса есть два поля AD и BC — до нашей эры и наша эра.
Кроме стандартных методов, которые есть в классе Calendar, у GregorianCalendar есть метод isLeapYear() для проверки високосного года.
Если год високосный, то возвращается true.
Отсчёт месяцев идёт от нуля, поэтому декабрь будет одиннадцатым месяцем. Чтобы не путаться с такими случаями, проще использовать понятные константы:
А получать нужные отрезки времени можно через метод get(). Например, узнать, какой месяц содержится в созданной нами дате можно так:
Изменить состояние объекта можно через метод set(). Например, установим новую дату у нашего объекта.
Можно сдвинуть дату на определённый период с помощью метода add(). Отодвинем дату на два месяца.
Методы getTime() и setTime() работают с объектами Date и полезны для преобразования.
TimeZone
Класс TimeZone позволяет работать с часовыми поясами, смещёнными относительно Гринвича, также известного универсальное глобальное время (UTC). Класс также учитывает летнее время.
SimpleTimeZone
Класс SimpleTimeZone — подкласс класса TimeZone и позволяет работать с часовыми поясами в Григорианском календаре.
Класс DateFormat
Класс DateFormat является абстрактным классом, с помощью которого можно форматировать и анализировать показания даты и времени. метод getDateInstance() возвращает экземпляр класса DateFormat, который может форматировать информацию о дате.
Чаще всего используется метод format(), позволяющий вывести дату в нужном формате.
Класс SimpleDateFormat
Класс SimpleDateFormat является подклассом класса DateFormat и позволяет определять собственные шаблоны форматирования для отображения даты и времени.
Символы форматирования строки
- A — AM или PM
- d — день месяца (1-31)
- D — день в году (1-366)
- H — часы в формате AM/PM (1-12)
- K — часы в формате суток (1-24)
- M — минуты (0-59)
- S — секунды (0-59)
- W — неделя в году (1-53)
- y — год
- z — часовой пояс
Количество повторений символа определяет способ представления даты. Например, можно указать hh:mm:ss, а можно h:m:s. В первом случае будет отображаться ноль перед цифрой.
Примеры работы с датами и временем можно найти в статье на эту тему.
Источник
Как сравнить даты в Java
Несколько примеров показывают, как сравнить устаревшую дату и календарь и Java 8 LocalDate, LocalDateTime, Instant и т. Д.
Автор: mkyong
Дата записи
В этой статье показано несколько примеров сравнения двух дат на Java. Обновлено примерами Java 8.
- 1. Сравните две даты
- 1.1 Дата.Сравнение
- 1.2 Дата. до(), Дата.после() и Дата.равно()
- 1.3 Проверьте, находится ли дата в определенном диапазоне
- 2. Сравните два календаря
- 3. Сравните две даты и время( Java 8)
- 3.1 Сравнение двух локальных данных
- 3.2 Сравнение двух локальных значений времени
- 3.3 Сравните два Моментальный
- 4 Проверьте, находится ли дата в определенном диапазоне (Java 8)
- 5 Проверьте, не старше ли дата 6 месяцев
- Рекомендации
1. Сравните две даты
Для унаследованного java.util. Дата , мы можем использовать Сравнение , до() , после() и равно() для сравнения двух дат.
1.1 Дата.Сравнение
Ниже приведен пример использования Date.compareTo для сравнения двух java.util. Дата на языке Java.
- Возвращаемое значение 0, если дата аргумента равна Дата .
- Возвращаемое значение больше 0 или положительное, если Дата находится после даты аргумента.
- Возвращаемое значение меньше 0 или отрицательное, если Дата находится перед датой аргумента.
Источник
Лучший способ сравнить даты на Android
Я пытаюсь сравнить дату в формате String с текущей датой. Вот как я это сделал (не тестировал, но должен работать), но использую устаревшие методы. Есть хорошее предложение по альтернативе? Спасибо.
P.S. Я действительно ненавижу заниматься Date на Java. Есть так много способов сделать то же самое, что вы действительно не уверены, какой из них правильный, поэтому мой вопрос здесь.
15 ответов
Ваш код может быть сокращен до
Kotlin поддерживает перегрузку операторов
В Kotlin вы можете легко сравнивать даты с помощью операторов сравнения. Потому что Kotlin уже поддерживает перегрузку операторов. Итак, чтобы сравнить объекты даты:
И если вы используете объекты календаря, вы можете легко сравнить их следующим образом:
Вы можете использовать validDate.setTime (strDate) Взгляните на javadoc по адресу http: // docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
Обновление: библиотека Joda-Time сейчас находится в режиме обслуживания и рекомендует перейти на платформу java.time , которая заменит ее. См. ответ Оле В.В..
Joda времени
Классы java.util.Date и .Calendar, как известно, доставляют много хлопот. Избежать их. Используйте Joda-Time или новый пакет java.time в Java. 8.
LocalDate
Если вам нужна только дата без времени суток, используйте класс LocalDate.
Часовой пояс
Получение текущей даты зависит от часового пояса. Новое свидание накатывает в Париже перед Монреалем. Укажите желаемый часовой пояс, а не зависите от значений JVM по умолчанию.
Пример в Joda-Time 2.3.
Иногда нам нужно составить список с датами, например
Сегодня с часом
Вчера со вчерашним днем
В другие дни с 23.06.2017
Для этого нам нужно сравнить текущее время с нашими данными.
Также вы можете проверить этот пример в GitHub и на этом сообщение.
Вы можете попробовать это
И вы можете использовать today.getTime() для получения значения и сравнения.
Время для современного ответа.
Java.time и ThreeTenABP
Когда я только что запустил этот код, вывод был:
Поскольку во всех часовых поясах дата никогда не бывает одной и той же, укажите точный часовой пояс для LocalDate.now . Если вы хотите, чтобы срок действия каталога истекал одновременно во всех часовых поясах, вы можете дать ZoneOffset.UTC при условии, что вы сообщаете пользователям, что вы используете UTC.
Я использую java.time, современный API даты и времени Java. Классы даты и времени, которые вы использовали, Calendar , SimpleDateFormat и Date , все плохо спроектированы и, к счастью, давно устарели. Кроме того, несмотря на название, Date представляет не дату, а момент времени. Одно из следствий этого: хотя сегодня 15 февраля 2019 г., вновь созданный объект Date уже после (то есть не равен) объекту Date из синтаксического анализа 15/02/2019 . Некоторых это смущает. В отличие от этого современный LocalDate — это дата без времени суток (и без часового пояса), поэтому два LocalDate , представляющие сегодняшнюю дату, всегда будут равны.
Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых и новых устройствах Android. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях, а также на новых устройствах Android (начиная с уровня API 26) встроен современный API.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На старых (более старых) версиях Android используется версия ThreeTen Backport для Android. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.
Ссылки
- Обучающее руководство по Oracle: дата и время, объясняющее, как использовать java.time.
- Запрос спецификации Java (JSR) 310, где java.time был первым описано .
- Проект ThreeTen Backport, обратный порт java.time для Java 6 и 7 (ThreeTen для JSR -310).
- ThreeTenABP, Android-версия ThreeTen Backport
- Вопрос: Как использовать ThreeTenABP в Android Project, с очень тщательным объяснение.
Сравнивает время, представленное этим Calendar, со временем, представленным данным Calendar.
Возвращает 0, если времена двух календарей равны, -1, если время этого календаря опережает время другого, 1, если время этого календаря следует за другим.
Конвертируйте дату в календарь и производите там свои расчеты. 🙂
Возвращает истину. Вы также можете сделать чек до и равно с помощью date.before и date.equal .
Обратите внимание, что правильный формат («дд / ММ / гггг») до того, как код заработает. «мм» означает минуты!
Вы можете напрямую создать Calendar из Date :
Вы можете использовать compareTo ()
Метод CompareTo должен возвращать отрицательное число, если текущий объект меньше, чем другой объект, положительное число, если текущий объект больше, чем другой объект, и ноль, если оба объекта равны друг другу.
Источник
Сравнить две даты в Java
мне нужно сравнить две даты в Java. Я использую код следующим образом:
Это не работает. Содержание переменных следующее:
- questionDate содержит 2010-06-30 00:31:40.0
- today содержит Wed Jun 30 01:41:25 IST 2010
как я могу решить это?
14 ответов
равенство дат зависит от того, что две даты равны миллисекунде. Создание нового объекта Date с помощью new Date() никогда не будет равна дате, созданной в прошлом. Джода ВремениAPI упрощают работу с датами; однако, используя только SDK Java:
Я бы использовал JodaTime для этого. Вот пример — Допустим, вы хотите найти разницу в днях между 2 датами.
JodaTime можно загрузить из здесь.
Мне непонятно, чего вы хотите, но я упомяну, что дата класс также имеет compareTo метод, который можно использовать для определения с одним вызовом, если два объекта даты равны или (если они не равны), что происходит раньше. Это позволяет сделать что-то вроде:
следует отметить, что документы API не гарантируют, что результаты будут -1, 0 и 1, поэтому вы можете использовать if-elses, а не коммутатор в любом производственном коде. Кроме того, если вторая дата равна null, вы получите исключение NullPointerException, поэтому упаковка кода в try-catch может быть полезна.
самый простой способ сравнить две даты-преобразовать их в числовое значение (например, метку времени unix).
можно использовать Date.getTime() метод, который возвращает время unix.
это esy с помощью time.compareTo(currentTime)
java.время
в Java 8 нет необходимости использовать Joda Времени поскольку он поставляется с аналогичным новым API в java.time пакета. Используйте LocalDate класса.
вы можете задать промежуток времени между датами с Period класса.
LocalDate — Это сравнимо с использованием equals и compareTo поскольку он не содержит информации о времени и Часовой пояс.
о java.время
на java.время framework встроен в Java 8 и более поздние версии. Эти классы вытесняют беспокойных старых наследие классы даты и времени, такие как java.util.Date , Calendar , & SimpleDateFormat .
чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.
где получить java.время занятий?
- Java SE 8, Java SE 9, и позже
- встроенный.
- часть стандартного API Java в комплекте реализация.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
- Android
- более поздние версии Android пакет реализации java.классы время.
- для более раннего Android,ThreeTenABP проект приспосабливается ThreeTen-Backport (упоминалось выше). См.как использовать ThreeTenABP..
на ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательным полигоном для возможные будущие дополнения к Java.время. Здесь вы можете найти полезные классы, такие как Interval , YearWeek , YearQuarter и больше.
Источник