我遇到了一个奇怪的问题。我需要设置一个任务在格林尼治标准时间上午9点运行。以下是我正在使用的代码:
AlarmManager mgr = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance(TimeZone
.getTimeZone("GMT"));
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR, 9);
calendar.set(Calendar.MINUTE, 0);
mgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
我的时区是GMT+2。作为一项测试,我试图在这个时候设置警报:
Alarm time = My time - 2 hours + couple of minutes to catch the alarm
但它从未奏效。我是不是错过了什么?提前谢谢。
这可能是问题所在:
calendar.set(Calendar.HOUR, 9);
这就是设置"上午或下午的时间"——如果你已经在下午,它会将其设置为晚上9点。我想你想要:
calendar.set(Calendar.HOUR_OF_DAY, 9);
这可能不能解释你的问题,但这肯定是需要解决的问题。请注意,它将在同一天——所以如果你在上午9点之后这样做,它就不会着火。
(您可能也应该将秒字段设置为0。)