Java日期/日历对象字符串,比较

Java日期/日历对象字符串,比较,java,string,date,calendar,conditional,Java,String,Date,Calendar,Conditional,我将日期对象格式化为 2011/06/13 17:52:20 并作为字符串返回。我如何将此日期与另一个以相同方式格式化的日期进行比较。对于我正在形成的条件语句,我想确定哪个大于、小于或等于 在可能已经有了这样做的框架的情况下,不需要重新发明轮子(或制作一些案例) 谢谢 使用simpleDataFormat解析 使用比较(..)获取的日期对象 例如: SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Dat

我将日期对象格式化为

2011/06/13 17:52:20
并作为字符串返回。我如何将此日期与另一个以相同方式格式化的日期进行比较。对于我正在形成的条件语句,我想确定哪个大于、小于或等于

在可能已经有了这样做的框架的情况下,不需要重新发明轮子(或制作一些案例)

谢谢

  • 使用
    simpleDataFormat
    解析
  • 使用
    比较(..)
    获取的
    日期对象
例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date1 = sdf.parse(string1);
Date date2 = sdf.parse(string2);

int result = date1.compareTo(date2);
结果是(来自
java.util.Date
文档):

如果参数日期等于此日期,则值为0;如果此日期早于日期参数,则值小于0;如果此日期在日期参数之后,则该值大于0

  • 使用
    simpleDataFormat
    解析
  • 使用
    比较(..)
    获取的
    日期对象
例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date1 = sdf.parse(string1);
Date date2 = sdf.parse(string2);

int result = date1.compareTo(date2);
结果是(来自
java.util.Date
文档):

如果参数日期等于此日期,则值为0;如果此日期早于日期参数,则值小于0;如果此日期在日期参数之后,则该值大于0


在我看来,您的日期格式是yyyy/mm/dd hh:mm:ss。如果是这种情况,您可以进行字符串比较,它将为您提供准确的大/小/相等值。字符串被编码为最重要到最不重要。

在我看来,您的日期格式是yyyy/mm/dd hh:mm:ss。如果是这种情况,您可以进行字符串比较,它将为您提供准确的大/小/相等值。字符串被编码为最重要到最不重要。

我的同事上周向我指出,yyyy-MM-dd HH:MM:ss字符串与基础日期的顺序完全兼容(只要字段都是零填充的)。因此,如果字符串值更容易获得,您可以对其进行比较。

我的同事上周向我指出,yyyy-MM-dd HH:MM:ss字符串与基础日期的顺序完全兼容(只要字段都是零填充的)。因此,如果字符串值更容易获得,您可以直接对其进行比较。

尽管SimpleDataFormat允许将文本解析为日期对象,但最好将日期存储为日期对象并在显示时对其进行解析


创建/存储日期对象并使用其内置的compareTo()方法

尽管SimpleDataFormat允许将文本解析为日期对象,但最好将日期存储为日期对象并在显示时进行解析

创建/存储日期对象并使用其内置的compareTo()方法

tl;博士 真的

细节 其他答案是正确的,因为您可以(a)按字母顺序比较这些特定字符串,或者(b)在解析为日期时间对象后按时间顺序比较

请注意,日期时间格式没有“格式”。它们包含日期时间信息。它们可以生成一个特定格式的字符串,但是日期时间对象和字符串是分开的

其他答案使用了麻烦的旧日期时间类,这些类现在是遗留的,被java.time类取代

您的输入缺少有关UTC和时区偏移量的信息。因此,我们必须将它们解析为
LocalDateTime
对象。要解析,用“<代码> t>代码>替换中间的空间,以符合ISO 8601标准来格式化表示日期时间值的字符串。

String input = "2011/06/13 17:52:20".replace( " " , "T" );
LocalDateTime ldtThen = LocalDateTime.parse( input ) ;
LocalDateTime ldtNow = LocalDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
比较一下

boolean ldtThenIsBefore = ldtThen.isBefore( ldtNow );
boolean ldtThenIsAfter = ldtThen.isAfter( ldtNow );
boolean ldtThenIsEqual = ldtThen.isEqual( ldtNow );

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

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

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

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如、、和。

tl;博士 真的

细节 其他答案是正确的,因为您可以(a)按字母顺序比较这些特定字符串,或者(b)在解析为日期时间对象后按时间顺序比较

请注意,日期时间格式没有“格式”。它们包含日期时间信息。它们可以生成一个特定格式的字符串,但是日期时间对象和字符串是分开的

其他答案使用了麻烦的旧日期时间类,这些类现在是遗留的,被java.time类取代

您的输入缺少有关UTC和时区偏移量的信息。因此,我们必须将它们解析为
LocalDateTime
对象。要解析,用“<代码> t>代码>替换中间的空间,以符合ISO 8601标准来格式化表示日期时间值的字符串。

String input = "2011/06/13 17:52:20".replace( " " , "T" );
LocalDateTime ldtThen = LocalDateTime.parse( input ) ;
LocalDateTime ldtNow = LocalDateTime.now( ZoneId.of( "America/Montreal" ) ) ;
比较一下

boolean ldtThenIsBefore = ldtThen.isBefore( ldtNow );
boolean ldtThenIsAfter = ldtThen.isAfter( ldtNow );
boolean ldtThenIsEqual = ldtThen.isEqual( ldtNow );

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

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

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

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 部分