Как перевести часы и минуты в Android Bundle?

Я пытаюсь передать час и минуту из строки EditText в объект календаря, а затем поместить час и минуту в Bundle для установки в TimePickerFragment. Строка относится к ранее выбранному времени, которое пользователь вводит в строке EditText. Я разделил строку на часовую и минутную части, используя «Integer.parseInt». Когда я запускаю, я получаю «Invalid int:« 07PM »[например, минуты с 17:07]. Дополнительные строки ошибок говорят: «at java.lang.Integer.invalidInt at java.lang.Integer.parse at java .lang.Integer.parseInt." Анализ не работает, потому что "PM" включается в разделение? Любые другие идеи о том, что вызывает проблему?

Файл активности:

{  Calendar tcal = Calendar.getInstance();
   String timeStr = gEditText.getText().toString().replace(" ", "");
   String[]timeParts = timeStr.split(":");
              tcal.set(Calendar.HOUR, Integer.parseInt(timeParts[0]));
              tcal.set(Calendar.MINUTE, Integer.parseInt(timeParts[1]));
              Bundle timebundle = new Bundle();
              timebundle.putInt("hour", tcal.get(Calendar.HOUR));
              timebundle.putInt("minute", tcal.get(Calendar.MINUTE));
}

Файл TimePicker:

public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
public Dialog onCreateDialog(Bundle savedInstanceState) {
if (getArguments() != null) {
    cal = Calendar.getInstance();
    hour = getArguments().getInt("hour");
    minute = getArguments().getInt("minute");
    cal.set(Calendar.HOUR, Calendar.MINUTE);
}
TimePickerDialog dialog = new TimePickerDialog(getActivity(), this , hour, minute, false);
dialog.setTitle("Select a Due Time");
return dialog;
}  

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
txtTime = (EditText) getActivity().getWindow().getDecorView().getRootView().findViewById(R.id.GEditText);
String AM_PM = "";

Calendar displaytime = Calendar.getInstance();
displaytime.set(Calendar.HOUR_OF_DAY, hourOfDay);
displaytime.set(Calendar.MINUTE, minute);

if (displaytime.get(Calendar.AM_PM) == Calendar.AM)
    AM_PM = "AM";

else if (displaytime.get(Calendar.AM_PM) == Calendar.PM)
    AM_PM = "PM";

String minuteString;
if (minute < 10)
    minuteString = "0" + minute;
else
    minuteString = "" + minute;

String hours = (displaytime.get(Calendar.HOUR)== 0) ? "12" :    displaytime.get(Calendar.HOUR) + "";
txtTime.setText(hours + ":" + minuteString + " " + AM_PM + " ");

txtTime.setSelection(txtTime.getText().length());
}

person AJW    schedule 04.10.2015    source источник


Ответы (1)


Попробуйте этот код

 timeStr = 5:07 PM;
    timeStr = timeStr.replace(" ", "");
    String[]timeParts = timeStr.split(":");
    int hour = Integer.parseInt(timeParts[0]);
    int minute;
    if (timeParts[1].contains("AM")){
        timeParts[1]= timeParts[1].replace("AM", "");     
    }
    if (timeParts[1].contains("PM"){
       timeParts[1]= timeParts[1].replace("PM", "");    
       hour = hour + 12;
    }
    minute = Integer.parseInt(timeParts[1]);

Надеюсь, это поможет вам показать вашу проблему

person Linh    schedule 04.10.2015
comment
Хорошо, я думаю, я вижу. В основном удалите AM или PM из минутной части времени. Правильный? Кроме того, почему час = час + 12? - person AJW; 04.10.2015
comment
@AJW, потому что 17:07 = 17:07 - person Linh; 04.10.2015
comment
Хорошо, и я вижу, что если только для времени PM. Я попробую, спасибо. - person AJW; 04.10.2015
comment
Думаю, это помогло. Принято и проголосовано, спасибо. - person AJW; 04.10.2015
comment
Одна маленькая проблема. Я установил 18:02 в Timepicker. Когда я позже нажму на EditText, чтобы изменить время, оно показывает 6:02. Должен ли я использовать HOUR_OF_DAY, а не HOUR? - person AJW; 04.10.2015
comment
Да, мне нужно сделать все HOUR_OF_DAY, включая синтаксический анализ и настройку, но затем отображать с помощью HOUR. - person AJW; 04.10.2015