if (cb1.isChecked())
{
Calendar calA = Calendar.getInstance();
//calA.set(Calendar.YEAR, Calendar.YEAR);
//calA.set(Calendar.MONTH, Calendar.MONTH);
//calA.set(Calendar.DAY_OF_MONTH, Calendar.DAY_OF_MONTH);
calA.set(Calendar.HOUR_OF_DAY, Calendar.HOUR_OF_DAY);
calA.set(Calendar.MINUTE, Calendar.MINUTE);
calA.set(Calendar.SECOND, Calendar.SECOND);
calA.set(Calendar.MILLISECOND, Calendar.MILLISECOND);
alarmManager.set(AlarmManager.RTC_WAKEUP, calA.getTimeInMillis(), pendingIntentA);
Toast.makeText(main.this, "Set time: " + String.valueOf(calA.getTime()), Toast.LENGTH_SHORT).show();
}
其他代码工作正常,如果我将小时和分钟设置为特定的代码,例如
calA.set(Calendar.HOUR_OF_DAY, 15);
calA.set(Calendar.MINUTE, 24);
它正在工作,但是使用此代码我总是得到这个toast消息: 星期六05:15 11:12或星期六05:12:13 (日期和时间都不好)
我的代码出了什么问题?
答案 0 :(得分:1)
Calendar.HOUR_OF_DAY
是一个常量,恰好是一个整数。
当你
calA.set(Calendar.HOUR_OF_DAY, Calendar.HOUR_OF_DAY);
事实上,你实际上将一天中的小时数设置为为此常数选择的任何数字。该值对于一天中的小时没有实际意义,因此它会产生垃圾结果。
当你获得日历时,它默认设置为当前时间,所以如果这是你想要的,那就不要设置时间:
与其他区域设置敏感的类一样,Calendar提供了一个类方法getInstance,用于获取此类型的通用对象。 Calendar的getInstance方法返回一个Calendar对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
如果您想设置“未来5分钟”之类的时间,请执行以下操作:
calA.add(Calendar.MINUTE, 5);
如果仍然得到错误的时间,请确认系统时间设置正确。
来源:
答案 1 :(得分:0)
Calendar calA = Calendar.getInstance();
返回一个日历对象,其区域设置基于系统设置,其时间字段已使用当前日期和时间进行初始化。
Sebastian P是正确的,Calendar.HOUR_OF_DAY
是一个常量,一个用于引用实际小时值的键/索引。
请参阅http://developer.android.com/reference/java/util/Calendar.html