前言
項(xiàng)目中有需求是實(shí)現(xiàn)類似與手機(jī)中勿擾模式的邏輯碾褂,判斷當(dāng)前時(shí)間點(diǎn)是否屬于指定時(shí)間段(24H)起暮。
實(shí)現(xiàn)思路
- 獲取當(dāng)前時(shí)間谒臼、開始時(shí)間、結(jié)束時(shí)間的小時(shí)數(shù)hour酬屉、分鐘數(shù)minute
- 首先比較hour半等,
i. endHour > startHour揍愁,即結(jié)束時(shí)間在開始時(shí)間之后,說明這個(gè)時(shí)間段的起止時(shí)間都在同一天杀饵。
ii. endHour < startHour莽囤,即結(jié)束時(shí)間在開始時(shí)間之前,說明這個(gè)時(shí)間段是從今天開始切距,明天結(jié)束朽缎。
?a. 若當(dāng)前日期在startHour之后 || 當(dāng)前日期在endHour之前,返回true
?b. 否則返回false
iii. endHour = startHour谜悟,如果開始時(shí)間與結(jié)束時(shí)間小時(shí)數(shù)一樣话肖,就需要比較分鐘數(shù)了,與比較小時(shí)數(shù)同理赌躺。
/*
* 判斷當(dāng)前時(shí)間是否在設(shè)置的dark mode時(shí)間段內(nèi)
* @param date1: 開始時(shí)間(hh:mm)
* @param date2: 結(jié)束時(shí)間(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();
}
//這里是時(shí)間段的起止都在同一天的情況狼牺,只需要判斷當(dāng)前時(shí)間是否在這個(gè)時(shí)間段內(nèi)即可
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;
}
}
記個(gè)Date的after()方法應(yīng)用羡儿,以后復(fù)制用
/*
** 判斷當(dāng)前時(shí)間是否在傳入的時(shí)間之后
*/
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;
}
}