Calendar 的set()方法

来源:互联网 发布:linux 配置网卡 编辑:程序博客网 时间:2024/04/29 11:44

今天按照实例编关于应用AlarmManager的代码时,遇到了Calendar的一个问题,硬生生的花费了很长时间,才找到代码问题所在;



Calendar currentTime = Calendar.getInstance();
// 创建一个TimePickerDialog实例,并把它显示出来。
new TimePickerDialog(MainActivity.this, 0, // 绑定监听器
new TimePickerDialog.OnTimeSetListener()
{
@Override
public void onTimeSet(TimePicker tp,
int hourOfDay, int minute)
{
// 指定启动AlarmActivity组件
Intent intent = new Intent(MainActivity.this,
AlarmActivity.class);
// 创建PendingIntent对象
PendingIntent pi = PendingIntent.getActivity(
MainActivity.this, 0, intent, 0);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
// 根据用户选择时间来设置Calendar对象
c.set(Calendar.HOUR, hourOfDay);
c.set(Calendar.MINUTE, minute);
// 获取AlarmManager对象
AlarmManager aManager = (AlarmManager)
getSystemService(ALARM_SERVICE);
// 设置AlarmManager将在Calendar对应的时间启动指定组件
aManager.set(AlarmManager.RTC_WAKEUP,
c.getTimeInMillis(), pi);
// 显示闹铃设置成功的提示信息
Toast.makeText(MainActivity.this, "闹铃设置成功啦"
, Toast.LENGTH_SHORT).show();
}
}, currentTime.get(Calendar.HOUR_OF_DAY), currentTime
.get(Calendar.MINUTE), false).show();

这段程序是想在TimePickerDialog选择的时刻,打开一个AlarmActivity。但是运行时,就是不执行AlarmActivity,为什么呢,Debug以下后发现Calendar  c对象的时间

比当前时间多出几千万毫秒。(当前时间20点,设置时间hourOfDay也是20);原来本意是某某时刻执行的程序,变成了经过某某时间段再执行的程序。这里都是

Calendar的set方法的缘故。这句话c.set(Calendar.HOUR, hourOfDay);是在c.setTimeInMillis(System.currentTimeMillis());时间基础上加hourOfDay小时,而不是替换HOUR.

所以应当将c.set(Calendar.HOUR, hourOfDay);
c.set(Calendar.MINUTE, minute);

这两句改为:c.set(currentTime.get(currentTime.YEAR),currentTime.get(currentTime.MONTH),

currentTime.get(currentTime.DAY_OF_MONTH),hourOfDay,minute,currentTime.get(currentTime.SECOND));

总结:

Calendar的set(xx,xx)方法不是替换,而是在原来基础上累加;



0 0
原创粉丝点击