每当时间为12:xx PM时,我的闹钟安卓应用程序会在12小时后设置闹钟

时间:2017-03-12 08:49:55

标签: android

我在android中构建一个警报应用程序。但每当中午12点的时候。它会在12小时后自动设置闹钟。如果我在10:00设置闹钟,则将其设置为22:00。如果我在14:00设置闹钟,则在第二天的02:00设置闹钟。 只有当我的安卓时钟显示12.xx时才会出现此错误。

我从按钮文字中抽出时间和日期.. 这是代码和日志。

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个小时。

2 个答案:

答案 0 :(得分:2)

您应该使用Calendar.HOUR_OF_DAY而不是Calendar.HOUR。您必须在一天中的12至24小时内面对此问题。 Calendar.HOUR用于12小时时钟系统,而Calender.HOUR_OF_DAY用于24小时时钟系统。

当12小时后新的Calendar对象实例被清除时,时间是在PM(12之后),你试图将Calender.HOUR设置为3,所以它下午3点,平均15小时。

答案 1 :(得分: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";
}