TL;博士
20时11分13秒< 01:00:00 <十四时49分00秒
LocalTime target = LocalTime.parse("01:00:00") ;
Boolean targetInZone = (
target.isAfter(LocalTime.parse("20:11:13"))
&&
target.isBefore(LocalTime.parse("14:49:00"))
) ;
java.time.LocalTime
化java。时间课程包括LocalTime
代表只有一天的时间没有日期并没有时区。
所以我想要的是,20:11:13 < 01:00:00 < 14:49:00。
首先我们定义边界。您的输入字符串恰好符合标准ISO 8601格式。 java.time类默认使用ISO 8601格式,因此不需要指定格式化模式。
LocalTime start = LocalTime.parse("20:11:13");
LocalTime stop = LocalTime.parse("14:49:00");
,并确定我们的测试情况下,目标01:00:00
。
LocalTime target = LocalTime.parse("01:00:00");
现在我们正在建立比较这些LocalTime
对象。我们希望看到目标是在较晚的时间之后但在较早的时间之前。这意味着在这种情况下,在第二天早上大约晚上8点到凌晨3点之间半夜。
Boolean isTargetAfterStartAndBeforeStop = (target.isAfter(start) && target.isBefore(stop)) ;
该测试可以更简单地表述为“AM和8 不之间下午3点”。然后,我们可以推广到任何一对LocalTime
对象,其中我们测试之间如果开始之前24小时制停止,之间不是如果在停止后开始(如在此问题的情况下)。
更进一步,时间跨度通常与半开放式的方法来处理,其中最开始是包容而结局是独家。因此严格来说,“中间”比较将是“目标等于或晚于开始且目标在停止之前”,或者更简单地说,“在开始之前和停止之前是目标而不是”。
Boolean isBetweenStartAndStopStrictlySpeaking =
((! target.isBefore(start) && target.isBefore(stop)) ;
如果开始是停止后,24小时内的时钟,再假设我们希望在这个问题(是后晚上8点,但前3点)建议的逻辑。
if(start.isAfter(stop)) {
return ! isBetweenStartAndStopStrictlySpeaking ;
} else {
return isBetweenStartAndStopStrictlySpeaking ;
}
关于java.time
的java.time框架是建立在Java 8和更高版本。这些类别取代了日期时间类别legacy,如java.util.Date
,Calendar
,& SimpleDateFormat
。
Joda-Time项目现在在maintenance mode,建议迁移到java.time类。请致电Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。规格是JSR 310。
从何处获取java.time类?
的ThreeTen-Extra项目与其他类扩展java.time。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,例如Interval
,YearWeek
,YearQuarter
和more。
怎么能这个不断是真的不考虑的日期?如果时间大于20:11:13,如果不可能小于14:49:00。 – jalynn2
@ jalynn2 - 对不起,不清楚。实际上,考虑到“20:11:13”总是小于“14:49:00”,“01:00:00”大于“20:11:13”,小于“14:49:00”。这是先决条件。 –
如果你的格式是HH:MM:SS,那么'01:00:00'在同一天不会比'20:11:13'更大,'20:11:13'永远不会比' 14:49:00'。如果您试图确定时间是在一天的“20:11:13”和第二天的“14:49:00”之间,那么您需要在比较中引入一个日期。 – jalynn2