前言
项目中有需求是实现类似与手机中勿扰模式的逻辑,判断当前时间点是否属于指定时间段(24H)。
实现思路
获取当前时间、开始时间、结束时间的小时数hour、分钟数minute
首先比较hour,
i. endHour > startHour,即结束时间在开始时间之后,说明这个时间段的起止时间都在同一天。
ii. endHour < startHour,即结束时间在开始时间之前,说明这个时间段是从今天开始,明天结束。
a. 若当前日期在startHour之后 || 当前日期在endHour之前,返回true
b. 否则返回false
iii. endHour = startHour,如果开始时间与结束时间小时数一样,就需要比较分钟数了,与比较小时数同理。
/*
* 判断当前时间是否在设置的dark mode时间段内
* @param date1: 开始时间(hh:mm)
* @param date2: 结束时间(hh:mm)
*/
private boolean isBelongPeriodTime(String date1, String date2){
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
Date currentTime = new Date(System.currentTimeMillis());
Date startTimeDate;
Date endTimeDate;
Calendar date = Calendar.getInstance();
Calendar begin = Calendar.getInstance();
Calendar end = Calendar.getInstance();
try{
date.setTime(df.parse(df.format(currentTime)));
startTimeDate = df.parse(date1);
endTimeDate = df.parse(date2);
begin.setTime(startTimeDate);
end.setTime(endTimeDate);
if (endTimeDate.getHours() < startTimeDate.getHours()) {
if (date.after(begin) || date.before(end)) {
Log.d(TAG, "current time is belong to " + date1 + " - " + date2);
return true;
}else {
Log.d(TAG, "current time isn't belong to " + date1 + " - " + date2);
return false;
}
}else if(endTimeDate.getHours() == startTimeDate.getHours()){
if (endTimeDate.getMinutes() < startTimeDate.getMinutes()) {
if (date.after(begin) || date.before(end)) {
Log.d(TAG, "current time is belong to " + date1 + " - " + date2);
return true;
}else {
Log.d(TAG, "current time isn't belong to " + date1 + " - " + date2);
return false;
}
}
}
}catch(ParseException e){
e.printStackTrace();
}
//这里是时间段的起止都在同一天的情况,只需要判断当前时间是否在这个时间段内即可
if (date.after(begin) && date.before(end)) {
Log.d(TAG, "current time is belong to " + date1 + " - " + date2);
return true;
}else {
Log.d(TAG, "current time isn't belong to " + date1 + " - " + date2);
return false;
}
}
记个Date的after()方法应用,以后复制用
/*
** 判断当前时间是否在传入的时间之后
*/
private boolean isAfterTime(String time){
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
Date currentTime = new Date(System.currentTimeMillis());
Calendar curTime = Calendar.getInstance();
Calendar scaTime = Calendar.getInstance();
try{
Date timeScale = df.parse(time);
curTime.setTime(df.parse(df.format(currentTime)));
scaTime.setTime(timeScale);
}catch (ParseException e){
e.printStackTrace();
}
if (curTime.after(scaTime)) {
return true;
}else {
return false;
}
}