【问题标题】:Unable to convert the string to Date in Java [duplicate]无法在 Java 中将字符串转换为日期 [重复]
【发布时间】:2018-10-02 06:30:59
【问题描述】:

我在尝试将以下类型的数据转换为 Date 时遇到问题。我是 Java 新手,正在努力解决这个问题。我想为比较器使用以下日期数据来比较日期。一些例子或提示会很可爱! 很高兴收到您的来信!

"2018-10-02T15:17:35"

int sortWithDate = fromDate.compareTo(fromDate2);
if (sortWithDate != 0) {
    return sortWithDate * -1;
}

【问题讨论】:

  • (LocalDateTime.parse("2018-10-02T15:17:35", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")) ...但可能已经有预定义的格式
  • 你也可以使用DateTimeFormatter.ISO_LOCAL_DATE_TIME,因为喜欢打字的人:P
  • 为什么要乘以-1?您可以只使用unary minus operatorreturn -sortWithDate; --- 更好的是,翻转要比较的日期:int sortWithDate = fromDate2.compareTo(fromDate); if (sortWithDate != 0) { return sortWithDate; }
  • @Andreas 交换参数给出了合理的结果,但可能会溜走读者的视线。我更愿意明确相反的顺序,例如以某种方式应用Comparator.reverseOrder()Comparator.reversed()(视情况而定)。
  • @OleV.V.真的。我通常会添加评论 // descending 或类似的东西,以保持代码更清晰,但不会混淆人类读者。

标签: java date datetime comparator


【解决方案1】:

如果您使用的是 java8+,请使用 java.time.LocalDateTime

LocalDateTime localDateTime = LocalDateTime.parse("2018-10-02T15:17:35");

您可以使用isAfter()/isBefore() 进行比较:

LocalDateTime fromDate = LocalDateTime.parse("2018-10-02T15:17:35");
LocalDateTime fromDate2 = LocalDateTime.parse("2018-10-02T14:17:35");

if (fromDate.isAfter(fromDate2)) {

}

【讨论】:

  • 或者使用DateTimeFormatter.ISO_LOCAL_DATE_TIME代替显式格式字符串。
  • @daniu 答案比你建议的还要简洁(里面没有明确的格式字符串)。
  • 如果提问者想要 Comparator 进行排序或类似操作,问题中的代码表明 Comparator.reverseOrder() 是所要求的。
  • @OleV.V.你是对的,我把实际日期误认为是格式字符串。所以 TIL LDT#parse 默认使用 ISO_LOCAL_DATE_TIME