Я пытаюсь сравнить дату в формате String с текущей датой. Вот как я это сделал (не тестировал, но должен работать), но использую устаревшие методы. Есть хорошие предложения по альтернативе? Спасибо.
PS Я действительно ненавижу делать Date на Java. Есть так много способов сделать то же самое, что вы действительно не уверены, какой из них правильный, поэтому мой вопрос здесь.
String valid_until = "1/1/1990";
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy");
Date strDate = sdf.parse(valid_until);
int year = strDate.getYear(); // this is deprecated
int month = strDate.getMonth() // this is deprecated
int day = strDate.getDay(); // this is deprecated
Calendar validDate = Calendar.getInstance();
validDate.set(year, month, day);
Calendar currentDate = Calendar.getInstance();
if (currentDate.after(validDate)) {
catalog_outdated = 1;
}
Calendar
,SimpleDateFormat
,Date
или любой из других длинных устаревших даты и времени Java классов. Вместо этого используйтеjava.time
современный API даты и времени Java . Да, вы можете использовать его на Android. Для более старых версий Android см. Как использовать ThreeTenABP в Android Project .Ответы:
Ваш код может быть сокращен до
или
источник
Вы можете использовать compareTo ()
источник
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь наследие, вытесняется java.time классов. Большая часть функциональности java.time перенесена на Java 6 и Java 7 в проекте ThreeTen-Backport . Далее адаптирован для более ранних версий Android (<26) в ThreeTenABP . См. Как использовать ThreeTenABP… .Вы можете напрямую создать
Calendar
изDate
:источник
Обратите внимание, что правильный формат («дд / ММ / гггг») до того, как код заработает. «мм» означает минуты!
источник
источник
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь наследие, вытесняется java.time классов. Большая часть функциональности java.time перенесена на Java 6 и Java 7 в проекте ThreeTen-Backport . Далее адаптирован для более ранних версий Android (<26) в ThreeTenABP . См. Как использовать ThreeTenABP… .он возвращает true .. и вы также можете проверить до и равно с помощью date.before и date.equal ..
источник
Сравнивает время, представленное этим Calendar, со временем, представленным данным Calendar.
Возвращает 0, если времена двух календарей равны, -1, если время этого календаря опережает время другого, 1, если время этого календаря следует за другим.
источник
конвертируйте дату в календарь и производите там свои расчеты. :)
Или:
источник
Время для современного ответа.
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
s, представляющие сегодняшнюю дату, всегда будут равны.Вопрос: Могу ли я использовать java.time на Android?
Да, java.time прекрасно работает на старых и новых устройствах Android. Просто требуется как минимум Java 6 .
org.threeten.bp
подпакетов.Ссылки
java.time
было впервые описано.java.time
в Java 6 и 7 (ThreeTen для JSR-310).источник
Вы можете попробовать это
и вы можете использовать
today.getTime()
для получения значения и сравнения.источник
Иногда нам нужно составить список с датами, например
сегодня с часом
вчера со вчерашним днем
в другие дни с 23.06.2017
Для этого нам нужно сравнить текущее время с нашими данными.
Также вы можете проверить этот пример на GitHub и в этом посте .
источник
Обновление: Joda время библиотека сейчас находится в режиме технического обслуживания, и рекомендует мигрировать в java.time рамки, преуспевает его. Смотрите ответ на Ole VV .
Джода-Тайм
Классы java.util.Date и .Calendar, как известно, проблематичны. Избежать их. Используйте либо Joda-Time либо новый пакет java.time в Java 8.
LocalDate
Если вам нужна только дата без времени суток, используйте класс LocalDate.
Часовой пояс
Получение текущей даты зависит от часового пояса. Новое свидание накатывает в Париже перед Монреалем. Укажите желаемый часовой пояс, а не зависите от значений JVM по умолчанию.
Пример в Joda-Time 2.3.
источник
Вы можете использовать validDate.setTime (strDate). Взгляните на javadoc на http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
источник
источник
В Kotlin вы можете легко сравнивать даты с помощью операторов сравнения. Потому что Kotlin уже поддерживает перегрузку операторов. Итак, чтобы сравнить объекты даты:
и если вы используете объекты календаря, вы можете легко сравнить их следующим образом:
источник