Ошибка формата времени для 12 AM/PM в android

Im создаю тревожные приложения для android. Я не очень разбираюсь в формате времени, поэтому я отправляюсь в googling и получаю этот пост.

Я следил за этим сообщением, но ошибка все еще остается. Мои приложения не могут отличить (допустим) 12:17 и 12:17. Таким образом, ошибка будет возникать, если час равен 12.

Что я сделал при принятии значения формы TimePicker (hh: m: aa):

String hour = ""; Calendar datetime = Calendar.getInstance(); datetime.set(Calendar.HOUR_OF_DAY, timeSchedule.getCurrentHour()); datetime.set(Calendar.MINUTE, timeSchedule.getCurrentMinute()); if (datetime.get(Calendar.AM_PM) == Calendar.AM && timeSchedule.getCurrentHour() == 0) //12 AM = 0 hour = "00"+ ":" + timeSchedule.getCurrentMinute(); else hour = timeSchedule.getCurrentHour() + ":" + timeSchedule.getCurrentMinute();

С выше кодом, 12:17 утра, станет 00:17, а 12:17 PM станет 12:17 вечера. Это значение сохраняется в формате времени mysql. Так как я хочу создавать приложения для будильника, пожалуйста, скажите мне, правильно ли я это сделал.

И это то, что я сделал, чтобы показать их пользователю, где 00:17 (взято из результата выше кода) становится 12:17 (правильно), но 12:17 становится 12:17 утра (неверно):

String time = getItem(position).getTime(); //value from above code SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss"); SimpleDateFormat newFormat = new SimpleDateFormat("hh:mm:aa"); String formatedTime = ""; try { Date date = format.parse(time); formatedTime = newFormat.format(date); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }

Честно говоря, это первый раз, когда я общаюсь с каким-то сигналом тревоги, поэтому, пожалуйста, любезно скажите мне, если я что-то сделаю неправильно. (рядом с моей ошибкой)

Спасибо за ваше время.

ОБНОВИТЬ

Это то, что я сделал сейчас:

Я изменил столбец mysql от Time to Varchar, потому что Time не позволит мне вставить "AM/PM".

После этого:

String hour = ""; Calendar datetime = Calendar.getInstance(); datetime.set(Calendar.HOUR_OF_DAY, timeSchedule.getCurrentHour()); datetime.set(Calendar.MINUTE, timeSchedule.getCurrentMinute()); String am_pm = ""; if (datetime.get(Calendar.AM_PM) == Calendar.AM) am_pm = "AM"; else am_pm = "PM"; hour = (datetime.get(Calendar.HOUR) == 0) ?"12":datetime.get(Calendar.HOUR)+"";
final String time = hour+ ":" + datetime.get(Calendar.MINUTE) + " " + am_pm ;

Выше код возвращается 12:17 и 12:17. При этом мне не нужно использовать SimpleDateFormat чтобы снова форматировать дату. Правильно ли это установить время будильника?

1 ответ

Я немного смущен нотной записью, которую вы хотите использовать. Существует два подхода для представления часов AM, PM. Либо в диапазоне 0:00-11:59 либо в диапазоне 1:00-12:59. Вы тоже не используете, таким образом, вы получаете проблемы в представлении часов, с которыми вы сталкиваетесь. PLease читает различные параметры, представленные в SimpleDateFormat.

Также не используйте свою собственную конвертацию - везде используйте класс sdk, таким образом, вы убедитесь, что не попадете в форматированный формат.

licensed under cc by-sa 3.0 with attribution.