以下代码我正在尝试的是,如果我正在检查的时间是在我第一次与之比较之前。
如果timeToCompare在下午6点之后变得很好,如果它位于两个时间段之间,它的工作正常,但只有在01:00:00 AM,这不是在时间范围内,但仍然会进入条件。
如果出错,请更正。
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不在这段时间的中间,但是如果条件允许的话仍然是gogin并且它正在哼唱"嗨,从给定时段之间的时间开始#34;
答案 0 :(得分:3)
您要在字符串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
所以,你的时间范围比你想象的要大!
答案 1 :(得分:0)
你应该使用小写hh
一小时值1-12。大写HH
用于24小时制0-23。
您应该使用Java 8及更高版本中内置的新java.time框架。旧的java.util.Date/.Calendar和SimpleDateFormat类非常麻烦。
新框架包含一个仅限时间值的类LocalTime
。此类没有日期,也没有时区。但请注意如何确定当前时间所需的时区。
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
类还实现了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
最早:01:00 ...最新:19:26:41.932