2017-03-12 125 views
0

我建立一個鬧鐘應用程序在Android中。但是每當中午12點的時候。它會在12小時後自動設置鬧鐘。比如,如果我在10:00設置鬧鐘,則將其設置爲22:00。如果我在14:00設置鬧鐘,則在第二天的02:00設置鬧鐘。 只有當我的android時鐘顯示12.xx時,纔會發生此錯誤。鬧鐘設置12小時後,我的鬧鐘android應用程序,每當時間爲12:xx PM

我正在從一個按鈕文本的時間和日期.. 這裏是代碼和日誌。

Date today = c.getTime(); 

       setAlarmTimeAndDate = Calendar.getInstance(); 
       setAlarmTimeAndDate.set(Calendar.DATE, Integer.parseInt(saveDateButton.getText().toString().substring(0, 2))); 
       setAlarmTimeAndDate.set(Calendar.MONTH, Integer.parseInt(saveDateButton.getText().toString().substring(3, 5)) - 1); 
       setAlarmTimeAndDate.set(Calendar.YEAR, Integer.parseInt(saveDateButton.getText().toString().substring(6, 10))); 
       setAlarmTimeAndDate.set(Calendar.HOUR, Integer.parseInt(saveTimeButton.getText().toString().substring(0, 2))); 
       setAlarmTimeAndDate.set(Calendar.MINUTE, Integer.parseInt(saveTimeButton.getText().toString().substring(3, 5))); 

       Log.d("currentDateAndTime", c.getTime().toString()); 
       Log.d("ButtonDateAndTime|alarm", saveDateButton.getText().toString() 
         + "|" + saveTimeButton.getText().toString() 
         + "|" +setAlarmTimeAndDate.getTime().toString()); 

日誌:

03-12 02:31:39.814 6896-6896/com.codedweeb.notesandmemo D/currentDateAndTime: Sun Mar 12 02:31:28 GMT+05:30 2017 
03-12 02:31:39.814 6896-6896/com.codedweeb.notesandmemo D/ButtonDateAndTime|alarm: 12/03/2017|03:30 AM|Sun Mar 12 03:30:39 GMT+05:30 2017 

    03-12 12:33:20.366 6896-6896/com.codedweeb.notesandmemo D/currentDateAndTime: Sun Mar 12 12:33:18 GMT+05:30 2017 
03-12 12:33:20.366 6896-6896/com.codedweeb.notesandmemo D/ButtonDateAndTime|alarm: 12/03/2017|03:30 AM|Sun Mar 12 15:30:20 GMT+05:30 2017 

我改變了我的電話的時間,然後它把報警12小時晚。

+0

請正確格式化您的代碼。今天是什麼日期? –

+0

今天的日期是日期變量,c是具有當前日期和時間的日曆的實例。 這是用來查看用戶是否在過去設置警報。 因此,今天是用戶設置鬧鐘的日期和時間的值。 @BasilBourque –

+0

我不明白TBH的問題。 – JonZarate

回答

2

您應該使用Calendar.HOUR_OF_DAY而不是Calendar.HOUR。你必須在一天中的12到24小時內面對這個問題。 Calendar.HOUR用於12小時制系統,而Calender.HOUR_OF_DAY用於24小時制系統。

當12小時後,日曆對象的新實例已被清除,時間在PM(12)之後,您嘗試將Calender.HOUR設置爲3,因此它使其爲3 PM,意味着15小時。

+0

你救了我的一天先生。非常感謝。 我會繼續檢查並通知您是否會出現任何錯誤。 目前,我測試了我能想到的所有可能的時間組合。 –

0

有一個基於小時的直接計算來確定AM與PM並將時間作爲文本字符串返回。以下是代碼:

timeString=""; 
int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); 
if (hour == 0) { 
    timeString = "12AM (Midnight)"; 
} else if (hour < 12) { 
    timeString = hour +"AM"; 
} else if (hour == 12) { 
    timeString = "12PM (Noon)"; 
} else { 
    timeString = hour-12 +"PM"; 
} 
+0

我已經應用了這個,但不知何故在Android它不能正常工作。雖然我在Java編譯器上測試了我的Java方法,但它工作正常。我不知道可能是一個錯誤。但上述解決方案很好,解決了我的問題。感謝你的回答。 –