Как я могу сравнить строку (заданного формата) с текущей датой? - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу сравнить строку даты (которую я получаю из viewHolder) с этим форматом "dd-MM-гггг ЧЧ: мм" с текущей датой и временем, но я продолжаю получать java.lang.IllegalArgumentException: Cannot format given Object as a Date. Вот как я пытался:

SimpleDateFormat dateAndTimeFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm", Locale.ROOT);
LocalDate localDate = LocalDate.now();
String currentDateAndTime = dateAndTimeFormat.format(localDate.toString());

if(viewHolder.time.getText().toString().equals(currentDateAndTime)){
            //irrelevant
}

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

SimpleDataFormat.format(...) принимает объект Date в качестве первого параметра . Вы передаете строку, потому что вы звоните toString(). Попробуйте это:

SimpleDateFormat dateAndTimeFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm", Locale.ROOT);
String currentDateAndTime = dateAndTimeFormat.format(new Date());

if (viewHolder.time.getText().toString().equals(currentDateAndTime)) {
  //irrelevant
}

0 голосов
/ 01 мая 2020

Go олл-ин java .time, современный Java API данных и времени.

    DateTimeFormatter dateAndTimeFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm", Locale.ROOT);
    ZonedDateTime zdt = ZonedDateTime.now(ZoneId.systemDefault());
    String currentDateAndTime = zdt.format(dateAndTimeFormat);

    System.out.println(currentDateAndTime);

Когда я только что запустил код, используя часовой пояс Pacific / Honolulu в качестве своего по умолчанию вывод был:

01-05-2020 08: 47

Что пошло не так в вашем коде?

Две вещи были неверны:

  1. A LocalDate - это просто дата без времени дня, поэтому вы не сможете отформатировать ее в строку, включающую часы дня и минуты. Вместо этого используйте ZonedDateTime, OffsetDateTime или LocalDateTime.
  2. . Хорошо использовать LocalDate или другой класс из java .time, современный Java API даты и времени. Современные классы и устаревшие SimpleDateFormat не работают вместе. Для форматирования объекта даты и / или времени из java .time вам необходимо использовать современный класс DateTimeFormatter. Это хорошо, потому что SimpleDateFormat - общеизвестно хлопотный класс, который вы не должны использовать ни при каких обстоятельствах. Что нас обманывает, так это то, что ваш код фактически скомпилирован, что создает впечатление, что он должен работать. Это никогда не было предназначено. SimpleDateFormat наследует метод format(Object) от Format, общего суперкласса для форматирования многих типов объектов, поэтому аргумент объявляется как Object, а не Date (другой устаревший класс).
...