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

Shu*_*ham 5 android android-alarms android-calendar

我正在设置一个警报,我从a TextView和AM/PM通过一个小时和分钟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);
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助!

adr*_*ian 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字段中获取小时,当然在创建实例时将其初始化为当前小时.

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

  • `Calendar.HOUR`只应该取值0-11(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#HOUR)所以它可能正在尝试当你将AM/PM设置为12时,向前滚动AM/PM会做一些智能操作. (3认同)