【发布时间】:2019-08-31 03:05:00
【问题描述】:
我正在使用下面的代码来检查一个小时是否介于另外两个特定时间之间:
String openHour = "08:00 AM";
String currentHour = "10:00 PM";
String closeHour = "11:00 PM"; //Change to 02:00 AM doesn't work!!!
SimpleDateFormat format = new SimpleDateFormat("hh:mm a");
Date openHourDate = format.parse(openHour);
Date currentHourDate = format.parse(currentHour);
Date closeHourDate = format.parse(closeHour);
Calendar openCalendar = Calendar.getInstance();
openCalendar.setTime(openHourDate);
Calendar currentCalendar = Calendar.getInstance();
currentCalendar.setTime(currentHourDate);
Calendar closeCalendar = Calendar.getInstance();
closeCalendar.setTime(closeHourDate);
Date open = openCalendar.getTime();
Date current = currentCalendar.getTime();
Date close = closeCalendar.getTime();
if (current.after(open) && current.before(close)) {
System.out.println("Correct!");
} else {
System.out.println("Incorrect!");
}
如果currentHour 是"10:00 PM",正如您在我的代码中看到的那样,一切正常,但如果我将其更改为"02:00 AM",即使currentHour 介于两者之间,代码也不会按预期工作08:00 AM 和 02:00 AM。如何解决?
【问题讨论】:
-
这可能与您的程序将
02:00AM视为同一天这一事实有关吗?如果是这种情况,您是说今天的收盘时间是02:00 AM,但同一天的开盘时间是08:00 AM。如果是第二天,则需要在关闭时间中增加一天。 -
您已使用 java 8 标记了您的问题,因此请查看 LocalTime 和此版本 JDK 引入的其他类似类
-
您可以使用
LocalDateTime等类添加一天 -
所以通过文字解释有点棘手,但我会尝试。您的
close值正在获取 Calendar 对象的实例并且只是设置时间对吗?这意味着您的open、current和close设置为当前日期。这意味着您正在查看open等于4/9/2019 0800 AM并且接近4/9/2019 0200AM。当您运行检查时,您的current设置为4/9/2019 1000PM不在close之前,因为close设置为与current同一天的凌晨0200。这更有意义吗? -
仅供参考,诸如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat等非常麻烦的日期时间类现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代.见Tutorial by Oracle。
标签: java java-8 java-time date java-calendar