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)方法不是替换,而是在原来基础上累加;
- Calendar 的set()方法
- Calendar类的add()和set()方法
- Calendar类的add()和set()方法
- Calendar类set()方法的“陷阱”
- Calendar的add和set方法的运用和区别
- calendar中set方法和静态属性带来的坑
- 深入理解Calendar的set和get方法
- 日期格式化和Calendar.set(...)和Calendar.add(...)方法的使用
- Calendar类set和add方法
- Calendar类常用方法 日期间的转换 set方法有巨坑
- Calendar的使用2(add set roll)方法的区别
- Calendar的用方法
- Calendar.set用法的深入探讨
- Calendar.set用法的深入探讨
- Calendar.set用法的深入探讨
- calendar的add和set用法
- Calendar的add()方法介绍
- Calendar的add()方法介绍
- 编译器做的那些事儿
- 实现无限自动循环的Viewpager,广告轮询页面
- scoper_ptr与auto_ptr
- 动态规划---三角矩阵最小路径
- poj 1113 Wall
- Calendar 的set()方法
- HTTP500错误:%1不是有效的 win32应用程序(64位转换32位)
- Redux 学习笔记(二)
- stadio踩过的坑(一)
- 装饰模式(java版)
- RTB竞价中的cookie mapping技术
- android 判断软键盘
- 面试总结(数据库索引、B树、B+树)
- ES 7 装饰器