如何检查一天中的时间是否介于两次之间?

在我的应用程序中,我创建了一个代表高中课​​程的对象。 该对象包含2个Calendar对象,表示每天的类的开始和停止时间。 当用户创建作业时,我想检查当前时间是否在任何类的两次之间。 如果是,我知道该分配是在该课程中创建的。 这是我当前的代码不起作用,因为.getTime()返回包含月和日的日期,而我只想比较小时和分钟。 那么如何修剪返回的日期以包含一天中的时间? 使用joda-time会更容易,如果是这样,应该使用哪些类?

public void checkTimeFrame() { time = Calendar.getInstance().getTime(); ArrayList mList = mClassList; // Changes index if assignment falls under time frame of class for (int a = 0; a < mList.size(); a++) { if (mList.get(a).getStartTime() != null && mList.get(a).getEndTime() != null && time.after(mList.get(a).getStartTime().getTime()) && time.before(mList.get(a) .getEndTime().getTime())) { index = a; updateClassEditText(); } } } 

您可以使用Calendar.get() ,如另一个答案中所述。 但是,要比较分钟,您也应该使用Calendar.MINUTE

 int minutes_in_day = time.get(Calendar.HOUR_OF_DAY)*60 + time.get(Calendar.MINUTE); 

然后,您可以将当前时间当天的分钟数与开始和结束时间的分钟数进行比较。 当然,这只会在时间在同一天时起作用。

JDK 8 Date-Time API是解决此类问题的好方法。 而不是日历,使用LocalTime来存储类的开始和结束时间。

 LocalTime now = LocalTime.now(ZoneId.systemDefault()); LocalTime start = mList.get(a).getStartTime(); LocalTime end = mList.get(a).getEndTime(); if(now.isAfter(start) && now.isBefore(end)){ //do something } 

对于Android,您可以使用适用于Android的java.time API的ThreeTenABP项目。

Calendar类有一个get方法,您可以在其中get不同的字段

例如

 int hr = time.get(Calendar.HOUR_OF_DAY) 

我在这里只提供您要求的与Joda-Time相关的答案。 Joda-Time的优势在于为时钟提供专用类型,即LocalTime 。 旧的java.util.Calendar -stuff没有提供这种优势,因此您遇到了困难。

首先转换java.util.Date的实例,如下所示:

 Date time = ...; DateTime dt = new DateTime(time, DateTimeZone.getDefault()); LocalTime lt = dt.toLocalTime(); 

请注意,转换始终取决于时区。 然后,您可以使用inheritance的方法isAfter(...)isBefore(...)来比较两个isAfter(...)实例。

  try { Date date1 = sdf.parse(given time); Date date2 = sdf.parse("08:00 AM"); Date date3 = sdf.parse("06:00 PM"); if((date1.after(date2))&&(date1.before(date3))||date1.equals(date2) ||date1.equals(date3) ) { } } catch (ParseException e){ e.printStackTrace(); }