我有两个字符串格式的日期,如下所示 -
String startDate = "2014/09/12 00:00";
String endDate = "2014/09/13 00:00";
我想确保 startDate 应该小于 endDate。 startDate 不应大于 endDate。
我如何比较这两个日期并相应地返回布尔值?
原文由 john 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用现代 java.time 类将输入解析为 LocalDateTime
对象,方法是使用 DateTimeFormatter
定义格式化模式,并通过调用 isBefore
现代方法使用 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 );
2014-09-12T00:00 早于 2014-09-13T00:00 = true
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 旧 日期时间类,例如 java.util.Date
、 Calendar
和 SimpleDateFormat
。
要了解更多信息,请参阅 Oracle 教程。并在 Stack Overflow 中搜索许多示例和解释。规范是 JSR 310 。
现在处于 维护模式 的 Joda-Time 项目建议迁移到 java.time 类。
您可以直接与数据库交换 java.time 对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。不需要字符串,不需要 java.sql.*
类。
在哪里获取 java.time 类?
ThreeTen-Extra 项目用附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval
、 YearWeek
、 YearQuarter
等等。
原文由 Basil Bourque 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
将它们转换为实际的
Date
对象,然后调用before
。回想一下
parse
将抛出一个ParseException
,所以你应该在这个代码块中捕获它,或者声明它作为你的方法签名的一部分被抛出。