calendar.set(Calendar.HOUR_OF_DAY,alarmHour);不管用。我究竟做错了什么?

时间:2012-09-12 18:06:32

标签: android android-alarms android-calendar

我正在设置一个警报,我从TextView和上午/下午通过Spinner获取小时和分钟。以下是我初始化Calendar对象的方法:

Calendar calen = Calendar.getInstance();
calen.set(Calendar.HOUR_OF_DAY, alarmHour); //alarmHour from TextView
calen.set(Calendar.MINUTE, alarmMinute); //alarmMinute from TextView
calen.set(Calendar.SECOND, 0);
calen.set(Calendar.MILLISECOND, 0);

if(amorpm.equals("PM") //amorpm from Spinner
{
    calen.set(Calendar.AM_PM, Calendar.PM);
}
else
{
    calen.set(Calendar.AM_PM, Calendar.AM);
}

问题是此Calendar对象的 Hour 值有时是正确的,即用户在TextView中输入的值(并且始终为1到12) 。但有时,该值等于当前小时。例如,如果当前时间晚上11:30 ,并且我为上午9:30 设置了闹钟,则小时字段已设置值 11 。一个奇怪的事情是,当我将Calendar对象的名称更改为其他名称时,比如说 cal ,它就可以了。但是以后不会工作。可能有什么不对?

感谢您的帮助!

1 个答案:

答案 0 :(得分:12)

我认为解决方案是拨打calen.set(Calendar.HOUR, alarmHour);而不是calen.set(Calendar.HOUR_OF_DAY, alarmHour);

问题是您要设置Calendar.HOUR_OF_DAY字段,然后设置AM / PM字段。 “一天中的小时”是整个24小时工作日的小时,因此将其与AM / PM结合使用是没有意义的。根据Java文档(http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html),在设置时间时,如果显示冲突信息,则将根据以下组合使用最近设置的信息:

  

HOUR_OF_DAY

     

AM_PM + HOUR

因为您在一小时后设置了AM / PM字段,所以从Calendar.HOUR字段获取小时,当然,在您创建实例时,该字段会初始化为当前小时。

变量的命名当然是红鲱鱼。这不可能影响它。