1

好的,所以我正在努力让警报在每天下午 3:00 发出通知,但我希望用户可以在 AM/PM 和 Hours/Min 之间自由更改此选项。我可能会使用 a TimePicker,这是我到目前为止的代码:

    public void startAlarm() {


            Intent intent = new Intent(currentDay.this, AlarmReceiver.class);
            PendingIntent sender = PendingIntent.getBroadcast(currentDay.this,0, intent,0);

            long firstTime = SystemClock.elapsedRealtime();
            firstTime += 15*1000;


            AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
            am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime,AlarmManager.INTERVAL_DAY, sender);


        }

所以,我想我将使用以下内容:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 19);
cal.set(Calendar.MINUTE, 45);

然后使用

cal.getTimeInMillis()

但这不起作用,有什么想法吗?谢谢!

编辑:所以,长话短说,我知道如何获取当前时间,然后添加让我们说 15 秒,但我想有一个确定的时间,例如下午 5:14,我尝试过的一切都没有不行

4

1 回答 1

2

据我所知,您正在获取具有当前日期/时间的日历实例,然后您将添加 19 小时 45 分钟,而不是将日历实例的时间明确设置为 19:45。这就是你的意思吗?您需要使用 Calendar set() 方法来设置明确的时间。

来自日历的 API 参考

Calendar 的 getInstance 方法返回一个日历,其区域设置基于系统设置,并且其时间字段已使用当前日期和时间进行初始化

    Calendar rightNow = Calendar.getInstance()
public abstract void add (int field, int value)

Since: API Level 1
Adds the specified amount to a Calendar field.
Parameters
    field   the Calendar field to modify.
    value   the amount to add to the field.
    Throws IllegalArgumentException if field is DST_OFFSET or ZONE_OFFSET.

编辑:要将本地时间转换为 UTC...

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 19);
cal.set(Calendar.MINUTE, 45);
int offset = cal.getTimeZone().getOffset(cal.getTimeInMillis());
firstTime = cal.getTimeInMillis() + offset;

注意:我没有尝试上述方法,可能有更简单的方法,但它应该可以工作。我很难测试这样的东西,因为我的时区是 GMT/UTC。

于 2010-12-17T03:04:23.993 回答