以下代码中的问题是我试图将晚上时间设置为下午 6 点,请忽略 Calendar.evening 值,因为它是为了测试目的。这是我的日志文件
D/通知:2017 年 11 月 14 日星期二 16:00:00 GMT+05:30vs EVE 2017 年 11 月 14 日星期二 16:00:00 GMT+05:30
周一:2017年11月14日星期二16:00:00 GMT+05:30 vs 2017年11月14日星期二16:00:00 GMT+05:30 EVE: 2017年11月14日星期二16:00:00 GMT+05:30 vs 2017年11月14日星期二16:00:00 GMT+05:30
现在这里的问题是两个 getTime(( 都返回 CURRENT TIME。
我希望 IF LOOP 在下午 4 点和早上 8 点执行,对于这个实例,我的逻辑似乎很合法!请指出我的错误
public class MyNotificationService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
static Calendar eve,morn;
@Override
public void onCreate() {
super.onCreate();
morn=Calendar.getInstance();
morn.set(Calendar.HOUR_OF_DAY, 4);
morn.set(Calendar.MINUTE, 0);
morn.set(Calendar.SECOND, 0);
morn.set(Calendar.AM_PM,1);
eve=Calendar.getInstance();
eve.set(Calendar.HOUR_OF_DAY, 6);
eve.set(Calendar.MINUTE, 0);
eve.set(Calendar.SECOND, 0);
eve.set(Calendar.AM_PM,1);
Log.d("Notification", "MORN "+morn.getTime().toString() +" vs EVE "+eve.getTime().toString());
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
setTimer();
return Service.START_STICKY;
}
void setTimer(){
Timer timer = new Timer ();
TimerTask hourlyTask = new TimerTask () {
@Override
public void run () {
Calendar now=Calendar.getInstance();
now.set(Calendar.MINUTE,0);
now.set(Calendar.SECOND,0);
Log.d("Notification MORN", morn.getTime().toString() +" vs "+now.getTime().toString());
if (now.compareTo(morn)==0||now.getTime().equals(morn.getTime())) {
Log.d("Notification Func", eve.getTime().toString() + " MORNING exe");
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
if (isInternetOn(getApplicationContext())){
getCaseDetails();
}else {
setNotification("Internet not available","Please check your Cases");
}
}
};
mainHandler.post(myRunnable);
}
Log.d("Notification EVE", eve.getTime().toString() +" vs "+now.getTime().toString());
if (now.compareTo(eve)==0||now.getTime().equals(eve.getTime())) {
Log.d("Notification Func", eve.getTime().toString() + " EVENING exe");
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {
getCaseDetails();
}
};
mainHandler.post(myRunnable);
}
}
};
// timer.schedule (hourlyTask, 0L, 1000*60*60);
timer.schedule (hourlyTask, 0L, 30*1000);
}
void getDetails() {
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "Notification Service Stopped", Toast.LENGTH_LONG).show();
}
public void setNotification(String titleStr,String descStr) {
setting alarm here.
}
}
需要使用 Calendar.HOUR
,而不是 Calendar.HOUR_OF_DAY
,在设置 AM/PM 时会忽略:
Calendar morn = Calendar.getInstance();
morn.set(Calendar.HOUR_OF_DAY, 4);
morn.set(Calendar.MINUTE, 0);
morn.set(Calendar.SECOND, 0);
morn.set(Calendar.AM_PM, Calendar.PM);
System.out.println(someDateFormat.format(morn.getTime()));
// current hour
morn = Calendar.getInstance();
morn.set(Calendar.HOUR, 4);
morn.set(Calendar.MINUTE, 0);
morn.set(Calendar.SECOND, 0);
morn.set(Calendar.AM_PM, Calendar.PM);
System.out.println(someDateFormat.format(morn.getTime()));
// correct hour