在我的应用程序中,我创建了一个代表高中课程的对象。该对象包含2个Calendar对象,表示每天的类的开始和停止时间。当用户创建作业时,我想检查当前时间是否在任何类的两次之间。如果是,我知道该分配是在该课程中创建的。这是我当前的代码不起作用,因为.getTime()返回包含月和日的日期,而我只想比较小时和分钟。那么如何修剪返回的日期以包含一天中的时间?使用joda-time会更容易吗?如果是这样,应该使用哪些类?
public void checkTimeFrame() {
time = Calendar.getInstance().getTime();
ArrayList<SchoolClass> 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();
}
}
}
答案 0 :(得分:2)
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项目。
答案 1 :(得分:1)
您可以使用Calendar.get()
,如另一个答案中所述。但是,要比较分钟数,您也应该使用Calendar.MINUTE
:
int minutes_in_day = time.get(Calendar.HOUR_OF_DAY)*60 + time.get(Calendar.MINUTE);
然后,您可以将当前时间当天的分钟数与开始和结束时间的分钟数进行比较。当然,这只会在时间在同一天时起作用。
答案 2 :(得分:0)
Calendar类有一个get
方法,您可以get
个不同的字段
e.g。
int hr = time.get(Calendar.HOUR_OF_DAY)
答案 3 :(得分:0)
我在这里只提供您要求的与Joda-Time相关的答案。 Joda-Time的优势在于为时钟时间提供专用类型,即LocalTime。旧的java.util.Calendar
- 东西没有提供这种优势,因此你的困难。
首先转换java.util.Date
的实例,如下所示:
Date time = ...;
DateTime dt = new DateTime(time, DateTimeZone.getDefault());
LocalTime lt = dt.toLocalTime();
请注意,转换始终取决于时区。然后,您可以使用继承的方法LocalTime
或isAfter(...)
来比较两个isBefore(...)
个实例。
答案 4 :(得分:0)
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();
}