我知道这个问题被问了十亿次,我真的试图利用答案,但这似乎不能像我预期的那样工作。我在通过 AlarmManager 设置闹钟时遇到问题 - UTC(或 GMT - 无论您喜欢什么)似乎一切正常,但是当涉及到其他时区时,警报没有在正确的时间触发。如果我在 12:00 设置闹钟,如果我的时区是 (+2),它会在 14:00 触发,晚了 2 小时。
下面是一个片段:
//todays date in seconds
long current = (System.currentTimeMillis()/86400000)*86400;
long time =current + 43200;
alarmManager.set(AlarmManager.RTC_WAKEUP, time*1000,
operationBroadcast);
设备上的时间是 6:42 AM这是我在警报管理器"转储"文件中发现的内容
RTC_WAKEUP #10: Alarm{420f49b8 type 0 com.pocketenergy.androidbeta}
type=0 when=+7h17m37s418ms repeatInterval=0 count=0
operation=PendingIntent{420f3b20: PendingIntentRecord{420f4808 com.pocketenergy.androidbeta broadcastIntent}}
据我在几个地方读到,无论在实际设备上选择什么时区,时间都应该以 UTC 格式设置,但我在日历上尝试了很多不同的东西,例如:
//todays date in seconds
long current = (System.currentTimeMillis()/86400000)*86400;
long time =current + 43200;
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time*1000);
TimeZone timeZone= TimeZone.getTimeZone("UTC"); //also tried TimeZone.getDefault();
calendar.setTimeZone(timeZone);
time = cal.getTimeInMillis();
alarmManager.set(AlarmManager.RTC_WAKEUP, time,
operationBroadcast);
同样的结果。想法,有人吗?:)
所以,我终于把它工作了。这是代码:)
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, time, operationBroadcast);