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(如上所述)
- 看
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类
- ,及以后
- 内置的李>
- 部分