如果时区与GMT(UTC)不同,AlarmManager会在错误的时间触发警报

时间:2014-11-19 09:50:15

标签: java android timezone android-alarms android-calendar

我知道这个问题被问了十亿次,而且我真的试图利用答案,但这似乎无法按照我的预期发挥作用。我通过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 这就是我在报警管理员和#34; dump"中找到的内容。档案

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);

同样的结果。 想法,任何人? :)

1 个答案:

答案 0 :(得分:2)

所以,我终于开始工作了。这是代码:)

        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);