如何比较Java中的两个字符串日期?

新手上路,请多包涵

我有两个字符串格式的日期,如下所示 -

 String startDate = "2014/09/12 00:00";

String endDate = "2014/09/13 00:00";

我想确保 startDate 应该小于 endDate。 startDate 不应大于 endDate。

我如何比较这两个日期并相应地返回布尔值?

原文由 john 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 713
2 个回答

将它们转换为实际的 Date 对象,然后调用 before

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd h:m");
System.out.println(sdf.parse(startDate).before(sdf.parse(endDate)));

回想一下 parse 将抛出一个 ParseException ,所以你应该在这个代码块中捕获它,或者声明它作为你的方法签名的一部分被抛出。

原文由 Makoto 发布,翻译遵循 CC BY-SA 3.0 许可协议

tl;博士

使用现代 java.time 类将输入解析为 LocalDateTime 对象,方法是使用 DateTimeFormatter 定义格式化模式,并通过调用 isBefore

java.time

现代方法使用 java.time 类。

定义格式模式以匹配您的输入。

解析为 LocalDateTime 对象,因为您的输入缺少时区指示符或与 UTC 的偏移量。

 String startInput = "2014/09/12 00:00";
String stopInput = "2014/09/13 00:00";

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu/MM/dd HH:mm" );

LocalDateTime start = LocalDateTime.parse( startInput , f ) ;
LocalDateTime stop = LocalDateTime.parse( stopInput , f ) ;
boolean isBefore = start.isBefore( stop ) ;

转储到控制台。

 System.out.println( start + " is before " + stop + " = " + isBefore );

在 IdeOne.com 上查看此代码的实时运行

2014-09-12T00:00 早于 2014-09-13T00:00 = true

Java 中的日期时间类型表,包括现代的和传统的。


关于 java.time

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

要了解更多信息,请参阅 Oracle 教程。并在 Stack Overflow 中搜索许多示例和解释。规范是 JSR 310

现在处于 维护模式Joda-Time 项目建议迁移到 java.time 类。

您可以直接与数据库交换 java.time 对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。不需要字符串,不需要 java.sql.* 类。

在哪里获取 java.time 类?

哪个 java.time 库与哪个版本的 Java 或 Android 一起使用的表。

ThreeTen-Extra 项目用附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 IntervalYearWeekYearQuarter 等等

原文由 Basil Bourque 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题