日期比较java失败

日期比较java失败,java,date,simpledateformat,Java,Date,Simpledateformat,在比较未来的日子时,Java出现了一些失败。如果可以,请查看代码 DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd"); Date date = dateFormat.parse("2258-11-01"); Date date1 = dateFormat.parse("2258-10-31"); System.out.println(date.after(date1)); 输出为:false 有人知道它为什么不起作用吗?m格式

在比较未来的日子时,Java出现了一些失败。如果可以,请查看代码

DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd");
Date date = dateFormat.parse("2258-11-01");
Date date1 =  dateFormat.parse("2258-10-31");
System.out.println(date.after(date1));
输出为:
false


有人知道它为什么不起作用吗?

m格式表示一小时中的一分钟。您可能打算使用
M
,表示一年中的月份:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

您应该使用大写MM表示月份,因为它不像您希望的那样解析

new SimpleDateFormat("yyyy-MM-dd");
tl;博士 使用现代课程,使其恰巧处于最佳状态

真的

细节 正如其他人提到的,格式模式区分大小写,而您的格式模式不正确

另一个问题是,您不适当地将仅日期的值压缩到一个日期类型中,该日期的时间为UTC

此外,您正在使用可怕的旧日期时间类,这些类在几年前被现代java.time类所取代

您的输入字符串恰好符合优秀的标准。默认情况下,java.time类在解析/生成字符串时使用这些格式。因此,甚至不需要费心定义格式化模式

LocalDate ld1 = LocalDate.parse( "2258-11-01" ) ;
LocalDate ld2 = LocalDate.parse( "2258-10-31" ) ;
比较一下

boolean isAfter = ld1.isAfter( ld2 ) ;  // true
所有这些都已经在堆栈溢出上讨论过很多次了。请学习在发布前彻底搜索堆栈溢出


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(您应该使用
      yyyy-MM-dd
      ,月份字符无效,
      m
      代表分钟,因此您分别使用了1月1日和1月31日的00:11和00:10,检查模式语法文档是您的朋友:FYI,非常麻烦的旧日期时间类,例如,
      java.text.SimpleDateFormat
      ar现在,Java8和更高版本中内置的类取代了e。
      boolean isAfter = ld1.isAfter( ld2 ) ;  // true