检查时间是否位于 12 小时时间跨度内的其他两个时间之间
check if the time lies between two other times in 12 hr time span
如果我正在检查的时间是在我第一次比较之前,我正在尝试的下面的代码是有效的。
如果 timeToCompare 在下午 6 点之后,它工作正常,如果它位于两个时间段之间,它工作正常,但前提是 01:00:00 AM 不在时间范围内,但仍进入 if 条件。
如有不妥请指正。
String string1 = "07:00:00 AM";
Date time1 = new SimpleDateFormat("HH:mm:ss a").parse(string1);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
String string2 = "06:00:00 PM";
Date time2;
time2 = new SimpleDateFormat("HH:mm:ss a").parse(string2);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(time2);
calendar2.add(Calendar.DATE, 1);
String timeToCompare = "01:00:00 AM";
System.out.println(formattedDate);
Date d = new SimpleDateFormat("HH:mm:ss a").parse(timeToCompare);
Calendar calendar3 = Calendar.getInstance();
calendar3.setTime(d);
calendar3.add(Calendar.DATE, 1);
我的 timeToCompare 但在 string1 和 string2 之间
Date x = calendar3.getTime();
if (x.after(calendar1.getTime()) && x.before(calendar2.getTime())) {
//checkes whether the current time is between 14:49:00 and 20:11:13.
System.out.println("Hi from time between given slots");
}
1:00:00 AM 不在那些拖车时间的中间,但它仍在进入 if 条件并且正在打印 "Hi from time between given slots"
您正在为字符串 2 和字符串 3 添加一天。在内部,Java 将您的时间存储如下:
> calendar1.getTime()
Thu Jan 01 07:00:00 CST 1970
> calendar2.getTime()
Fri Jan 02 06:00:00 CST 1970
> calendar3.getTime()
Fri Jan 02 01:00:00 CST 1970
所以,你的时间范围比你想象的要大!
解析模式不正确
您应该使用小写 hh
作为小时值 1-12。大写 HH
表示 24 小时制 0-23.
java.time
您应该使用 Java 8 及更高版本中内置的新 java.time 框架。旧的 java.util.Date/.Calendar 和 SimpleDateFormat classes 是出了名的麻烦。
新框架包括 class 时间值 LocalTime
。此 class 没有日期,也没有时区。但请注意如何需要时区来确定当前时间。
String string1 = "07:00:00 AM";
String string2 = "06:00:00 PM";
String string3 = "01:00:00 AM";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "hh:mm:ss a" , Locale.ENGLISH );
LocalTime localTime1 = formatter.parse ( string1 , LocalTime :: from );
LocalTime localTime2 = formatter.parse ( string2 , LocalTime :: from );
LocalTime localTime3 = formatter.parse ( string3 , LocalTime :: from );
LocalTime now = LocalTime.now ( ZoneId.of ( "America/Montreal" ) );
这些 LocalTime 对象具有方便的 isBefore
、isAfter
和 isEqual
方法。
Boolean isFirstInputEarlierThanNow = localTime1.isBefore ( now );
LocalTime
class 也实现了 Comparable
接口。因此,您可以按照示例代码中所示对它们进行排序。
List<LocalTime> localTimes = Arrays.asList ( localTime1 , localTime2 , localTime3 , now );
Collections.sort ( localTimes );
LocalTime earliest = localTimes.get ( 0 ); // Index, meaning zero-based counting.
LocalTime latest = localTimes.get ( localTimes.size () - 1 ); // Index (zero-based counting), so subtract one.
转储到控制台。
System.out.println ( "localTimes: " + localTimes );
System.out.println ( "isFirstInputEarlierThanNow: " + isFirstInputEarlierThanNow );
System.out.println ( "earliest: " + earliest + " … latest: " + latest );
当运行.
localTimes: [01:00, 07:00, 18:00, 19:26:41.932]
isFirstInputEarlierThanNow: true
earliest: 01:00 … latest: 19:26:41.932
如果我正在检查的时间是在我第一次比较之前,我正在尝试的下面的代码是有效的。
如果 timeToCompare 在下午 6 点之后,它工作正常,如果它位于两个时间段之间,它工作正常,但前提是 01:00:00 AM 不在时间范围内,但仍进入 if 条件。
如有不妥请指正。
String string1 = "07:00:00 AM";
Date time1 = new SimpleDateFormat("HH:mm:ss a").parse(string1);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(time1);
String string2 = "06:00:00 PM";
Date time2;
time2 = new SimpleDateFormat("HH:mm:ss a").parse(string2);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(time2);
calendar2.add(Calendar.DATE, 1);
String timeToCompare = "01:00:00 AM";
System.out.println(formattedDate);
Date d = new SimpleDateFormat("HH:mm:ss a").parse(timeToCompare);
Calendar calendar3 = Calendar.getInstance();
calendar3.setTime(d);
calendar3.add(Calendar.DATE, 1);
我的 timeToCompare 但在 string1 和 string2 之间
Date x = calendar3.getTime();
if (x.after(calendar1.getTime()) && x.before(calendar2.getTime())) {
//checkes whether the current time is between 14:49:00 and 20:11:13.
System.out.println("Hi from time between given slots");
}
1:00:00 AM 不在那些拖车时间的中间,但它仍在进入 if 条件并且正在打印 "Hi from time between given slots"
您正在为字符串 2 和字符串 3 添加一天。在内部,Java 将您的时间存储如下:
> calendar1.getTime()
Thu Jan 01 07:00:00 CST 1970
> calendar2.getTime()
Fri Jan 02 06:00:00 CST 1970
> calendar3.getTime()
Fri Jan 02 01:00:00 CST 1970
所以,你的时间范围比你想象的要大!
解析模式不正确
您应该使用小写 hh
作为小时值 1-12。大写 HH
表示 24 小时制 0-23.
java.time
您应该使用 Java 8 及更高版本中内置的新 java.time 框架。旧的 java.util.Date/.Calendar 和 SimpleDateFormat classes 是出了名的麻烦。
新框架包括 class 时间值 LocalTime
。此 class 没有日期,也没有时区。但请注意如何需要时区来确定当前时间。
String string1 = "07:00:00 AM";
String string2 = "06:00:00 PM";
String string3 = "01:00:00 AM";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "hh:mm:ss a" , Locale.ENGLISH );
LocalTime localTime1 = formatter.parse ( string1 , LocalTime :: from );
LocalTime localTime2 = formatter.parse ( string2 , LocalTime :: from );
LocalTime localTime3 = formatter.parse ( string3 , LocalTime :: from );
LocalTime now = LocalTime.now ( ZoneId.of ( "America/Montreal" ) );
这些 LocalTime 对象具有方便的 isBefore
、isAfter
和 isEqual
方法。
Boolean isFirstInputEarlierThanNow = localTime1.isBefore ( now );
LocalTime
class 也实现了 Comparable
接口。因此,您可以按照示例代码中所示对它们进行排序。
List<LocalTime> localTimes = Arrays.asList ( localTime1 , localTime2 , localTime3 , now );
Collections.sort ( localTimes );
LocalTime earliest = localTimes.get ( 0 ); // Index, meaning zero-based counting.
LocalTime latest = localTimes.get ( localTimes.size () - 1 ); // Index (zero-based counting), so subtract one.
转储到控制台。
System.out.println ( "localTimes: " + localTimes );
System.out.println ( "isFirstInputEarlierThanNow: " + isFirstInputEarlierThanNow );
System.out.println ( "earliest: " + earliest + " … latest: " + latest );
当运行.
localTimes: [01:00, 07:00, 18:00, 19:26:41.932]
isFirstInputEarlierThanNow: true
earliest: 01:00 … latest: 19:26:41.932