如何将(给定格式的)字符串与当前日期进行比较?



我想将具有这种格式"dd-MM-yyyy HH:mm"的日期字符串(我从viewHolder获得的)与当前日期和时间进行比较,但我不断得到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
}

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
}

全力以赴 java.time,现代 Java dat 和 time 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);

当我刚才使用太平洋/檀香山时区作为默认值运行代码时,输出为:

2020-05-01 08:47

您的代码中出了什么问题?

有两件事是错误的:

  1. LocalDate只是一个没有时间的日期,因此无法将其格式化为包含一天中的小时和分钟的字符串。而是使用ZonedDateTimeOffsetDateTimeLocalDateTime
  2. 最好使用 java.time 中的LocalDate或其他类,即现代 Java 日期和时间 API。现代课程和过时的SimpleDateFormat不能一起工作。要从java.time格式化日期和时间对象,您需要使用现代DateTimeFormatter类。这很好SimpleDateFormat因为这是一个出了名的麻烦类,您在任何情况下都不想使用它。容易愚弄我们的是你的代码实际上是编译的,这给人的印象是它应该工作。它从来都不是故意的。SimpleDateFormat继承了format(Object)方法,Format是一个用于格式化多种对象的通用超类,这就是为什么参数被声明为Object,而不是Date(另一个过时的类)。

最新更新