Android: установка времени в таймере выбора со временем, отображаемым в текстовом режиме
В моем приложении я показываю время в текстовом виде как 7:00 вечера. При щелчке по текстовому представлению появляется диалоговое окно выбора времени. В этом окне выбора времени я должен показывать точно такое же время, что и в текстовом просмотре. Но я не понимаю, как это сделать.
КОД
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm a");
//int hr = 0;
Date date = null;
try
{
date = sdf.parse(resDateArray[3]);
}
catch (ParseException e) {
e.printStackTrace();
}
final Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
//tp is reference variable for time picker
tp.setCurrentHour(calendar.get(Calendar.HOUR));
tp.setCurrentMinute(calendar.get(Calendar.MINUTE));
}//else
Ответы
Ответ 1
Вы должны использовать SimpleDateFormat
, чтобы получить объект Date
из вашего String
.
Затем просто позвоните
picker.setCurrentHour(date.getHours())
и
picker.setCurrentMinute(date.getMinutes())
Так как объект Date
устарел, вы должны использовать вместо него Calendar
.
Вы можете создать экземпляр Calendar
следующим образом:
Calendar c = Calendar.getInstance();
c.setTime(date);
picker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
picker.setCurrentMinute(c.get(Calendat.MINUTE));
Изменить: полный код
SimpleDateFormat sdf = new SimpleDateFormat("hh:ss");
Date date = null;
try {
date = sdf.parse("07:00");
} catch (ParseException e) {
}
Calendar c = Calendar.getInstance();
c.setTime(date);
TimePicker picker = new TimePicker(getApplicationContext());
picker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
picker.setCurrentMinute(c.get(Calendar.MINUTE));
Ответ 2
Если кто-то использует следующий формат, который не использует виджет timepicker, используйте этот файл.
mStartTime.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new TimePickerDialog(AddAppointmentActivity.this, onStartTimeListener, calendar
.get(Calendar.HOUR), calendar.get(Calendar.MINUTE), false).show();
}
});
TimePickerDialog.OnTimeSetListener onStartTimeListener = new OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String AM_PM;
int am_pm;
mStartTime.setText(hourOfDay + " : " + minute + " " + AM_PM);
calendar.set(Calendar.HOUR, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
}
};
Ответ 3
Я создал эту вспомогательную функцию, чтобы получить время
public static void showTime(final Context context, final TextView textView) {
final Calendar myCalendar = Calendar.getInstance();
TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String am_pm = "";
myCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
myCalendar.set(Calendar.MINUTE, minute);
if (myCalendar.get(Calendar.AM_PM) == Calendar.AM)
am_pm = "AM";
else if (myCalendar.get(Calendar.AM_PM) == Calendar.PM)
am_pm = "PM";
String strHrsToShow = (myCalendar.get(Calendar.HOUR) == 0) ? "12" : myCalendar.get(Calendar.HOUR) + "";
//UIHelper.showLongToastInCenter(context, strHrsToShow + ":" + myCalendar.get(Calendar.MINUTE) + " " + am_pm);
textView.setText(strHrsToShow + ":" + myCalendar.get(Calendar.MINUTE) + " " + am_pm);
}
};
new TimePickerDialog(context, mTimeSetListener, myCalendar.get(Calendar.HOUR), myCalendar.get(Calendar.MINUTE), false).show();
}
и Как получить текущее время в требуемом формате, я использую следующий код. //PARAM Дата - это дата времени, в которое вы хотите отформатировать //PARAM currentFormat даты //PARAM requiredFormat даты
public static String getFormattedDate(String date, String currentFormate, String requiredFormate) {
//SimpleDateFormat formatActual = new SimpleDateFormat("yyyy - MM - dd");
if (date != null) {
SimpleDateFormat formatActual = new SimpleDateFormat(currentFormate);
Date dateA = null;
try {
dateA = formatActual.parse(date);
System.out.println(dateA);
} catch (ParseException e) {
e.printStackTrace();
}
//SimpleDateFormat formatter = new SimpleDateFormat("dd MMM, yyyy");
SimpleDateFormat formatter = new SimpleDateFormat(requiredFormate);
String format = formatter.format(dateA);
System.out.println(format);
return format;
} else {
return "";
}
}
использование getFormattedDate:
String date = getFormattedDate(dateYouWantToFormate,"hh:mm a","hh:mm");
Ответ 4
Для AM/PM вам нужно реализовать логику для этого, и это как показано ниже.. так что вы можете получить результат, как вы упомянули... просто попробуйте под кодом...
int hr=tp.getCurrentHour();
String a="AM";
if(hr>=12){
hr=hr-12;
a="PM";
}
String tm=hr+":"+tp.getCurrentMinute()+" "+a;
Toast.makeText(MainActivity.this, tm, 500).show();
Ответ 5
Если вы используете TimePicker в наши дни, вероятно, лучше всего проверить версию сборки, так как setCurrentHour и setCurrentMinute устарели.
SimpleDateFormat sdf = new SimpleDateFormat("hh:ss");
Date date = null;
try {
date = sdf.parse("07:00");
} catch (ParseException e) {
}
Calendar c = Calendar.getInstance();
c.setTime(date);
TimePicker timePicker = new TimePicker(getApplicationContext());
if (Build.VERSION.SDK_INT >= 23) {
timePicker.setHour(calculateHours());
timePicker.setMinute(calculateMinutes());
}
else {
timePicker.setCurrentHour(calculateHours());
timePicker.setCurrentMinute(calculateMinutes());
}
Ответ 6
Некоторые изменения после SDK версии 23;
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
Date date = null;
try {
date = sdf.parse(editedDevice.sleepTimeStart);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(date != null) {
Calendar c = Calendar.getInstance();
c.setTime(date);
sleepTimeStartPicker.setHour(c.get(Calendar.HOUR_OF_DAY));
sleepTimeStartPicker.setMinute(c.get(Calendar.MINUTE));
}