2017-03-12 252 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方法,但它工作正常。我不知道可能是一个错误。但上述解决方案很好,解决了我的问题。感谢你的回答。 –