Android 在格林尼治标准时间上午9点设置警报

Android 在格林尼治标准时间上午9点设置警报,android,timezone,alarmmanager,gmt,Android,Timezone,Alarmmanager,Gmt,我有一个奇怪的问题。我需要将任务设置为在格林威治标准时间上午9点运行。以下是我使用的代码: AlarmManager mgr = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); Calendar calendar = Calendar.getInstance(TimeZone .getTimeZone("GMT")); cale

我有一个奇怪的问题。我需要将任务设置为在格林威治标准时间上午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。)

我已经尝试将小时设置为13,因为现在我的时区是15。不幸的是,这不起作用。@Egor:HOUR不应该是13或15-它应该是1或3。一天的工作时间是13或15小时。哦,当然,现在知道了。谢谢