5

我正在设置一个闹钟,我从 aTextView和 AM/PM 通过 a获取小时和分钟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);
}

问题是这个对象的HourCalendar有时是正确的,即用户输入的值TextView(它总是 1 到 12)。但有时,该值等于当前小时。例如,如果当前时间是11:30 pm,而我将闹钟设置为9:30 am,则Hour字段的值为11。一件奇怪的事情是,当我将Calendar对象的名称更改为其他名称时,例如cal,它可以工作。但是以后就不行了。有什么问题?

谢谢你的帮助!

4

1 回答 1

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字段中获取的,当您创建实例时,它当然会初始化为当前小时。

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

于 2012-09-12T18:36:55.700 回答