2012-09-12 24 views
4

我正在設置鬧鐘,我從TextView和AM/PM通過Spinner獲取小時和分鐘。這裏是我初始化Calendar對象:calendar.set(Calendar.HOUR_OF_DAY,alarmHour);不管用。我究竟做錯了什麼?

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對象的小時值有時即其中用戶在TextView進入值正確(和它始終是1到12) 。但有時,該值等於當前小時。例如,如果當前時間是晚上11:30,我把鬧鐘調在上午9:30,則小時字段的值是。奇怪的是,當我將Calendar對象的名稱更改爲其他名稱時,如cal,它可以工作。但以後不會工作。什麼可能是錯的?

感謝您的幫助!

回答

11

我認爲解決的辦法是調用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場,這是當然,當你創建實例初始化爲當前小時的拍攝。

變量的命名當然是紅鯡魚。這不可能影響它。

+0

這確實是我犯的錯誤。但我注意到,當我從微調器中選擇「PM」並在'HOUR'中輸入鬧鐘「12」時,它會在鬧鐘中將「PM」更改爲「AM」。同樣,選擇「AM」和「12」將其更改爲「PM」。儘管如此,它對非12值仍然有效。 –

+3

'Calendar.HOUR'只能取值0-11(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html#HOUR),所以很可能試着做一些聰明的事情,當你把它設置爲12時,將AM/PM向前滾動。 – adrian

+0

感謝您的回答。我決定採用'Calendar.HOUR_OF_DAY'中的值,並通過自己的邏輯設置AM/PM,因爲在應用程序中,我只以12小時的格式獲取值。 –