1

我正在使用 API 来获取我的 Android 应用程序的电影版本,并且发布日期以毫秒 UTC 为单位。当我采用该发布日期并将其设置在用户的手机上时,它会在他的时区进行转换并被调用。

例子:

电影的上映日期(以毫秒为单位):

1509667200000

到 UTC 时间和日期:

2017 年 11 月 3 日星期五 00:00:00

到本地时间和日期:(东部时间,我的时区)

2017 年 11 月 2 日星期四 20:00:00

当我设置闹钟时

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(releaseDate);
    Date date = calendar.getTime();
    alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTime(), alarmIntent);

警报在 2017 年 11 月 2 日 20:00:00 被调用,但它需要在 11 月 3 日午夜被调用。

谢谢

4

3 回答 3

2

我做了什么,现在它完美无缺:

    // Calendar
    TimeZone timeZone = TimeZone.getTimeZone("UTC");
    Calendar calendar = Calendar.getInstance(timeZone);
    calendar.setTimeInMillis(releaseDate);
    Date date = calendar.getTime();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent);
    } else {
        alarmManager.set(AlarmManager.RTC_WAKEUP, date.getTime(), pendingIntent);
    }
于 2018-07-29T18:28:03.243 回答
1

您可以尝试将时区设置为 UTC

calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
于 2018-07-29T18:24:59.403 回答
0

几天我一直在使用警报应用程序。我已经完成了学校课程表的警报模块。我所做的是...

@Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

            Calendar calNow = Calendar.getInstance();
            Calendar calSet = (Calendar) calNow.clone();

            calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
            calSet.set(Calendar.MINUTE, minute);
            calSet.set(Calendar.SECOND, 0);
            calSet.set(Calendar.MILLISECOND, 0);

            if(calSet.compareTo(calNow) <= 0){
                //Today Set time passed, count to tomorrow
                calSet.add(Calendar.DATE, 1);
            }

            setAlarm(calSet);
        }};

    private void setAlarm(Calendar targetCal){

        textAlarmPrompt.setText(
                "\n\n***\n"
                + "Alarm is set@ " + targetCal.getTime() + "\n"
                + "***\n");

        Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
        AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
//      alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);
    }
于 2018-07-29T18:35:17.377 回答