TimePickerDialog und AM oder PM

Ich habe einen TimePickerDialog mit is24Hour auf false gesetzt, da ich dem Endbenutzer das bekanntere 12-Stunden-Format präsentieren möchte. Wenn die Stunden-, Minuten- und AM PM-Anzeige eingestellt sind und die Uhrzeit zurückgegeben wird, wie kann ich feststellen, ob der Endbenutzer AM oder PM ausgewählt hat?

Das habe ich für den Hörer:

private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMinute = minute; // mIsAM = WHERE CAN I GET THIS VALUE } }; 

    Der hourOfDay wird immer 24 Stunden sein. Wenn Sie den Dialog geöffnet haben, in dem is24HourView auf false , muss sich der Benutzer nicht mit den 24-Stunden-Formatierungen befassen, aber Android konvertiert diese in eine 24-Stunden-Zeit, wenn er onTimeSet() .

    Das hat für mich funktioniert:

     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { String am_pm = ""; Calendar datetime = Calendar.getInstance(); datetime.set(Calendar.HOUR_OF_DAY, hourOfDay); datetime.set(Calendar.MINUTE, minute); if (datetime.get(Calendar.AM_PM) == Calendar.AM) am_pm = "AM"; else if (datetime.get(Calendar.AM_PM) == Calendar.PM) am_pm = "PM"; String strHrsToShow = (datetime.get(Calendar.HOUR) == 0) ?"12":datetime.get(Calendar.HOUR)+""; ((Button)getActivity().findViewById(R.id.btnEventStartTime)).setText( strHrsToShow+":"+datetime.get(Calendar.MINUTE)+" "+am_pm ); } 

    Hi du könntest dein eigenes Format wie folgt verwenden:

      String myFormat = "hh:mm a"; // your own format SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); String formated_time = sdf.format(calendar_time.getTime()); //format your time 

    Ich fand, dass “a” der Code in der Formatierungszeit ist, der AM-PM darstellt: http://www.tutorialspoint.com/java/java_date_time.htm

    eine nette Toast-Nachricht mit dem ausgewählten Benutzer, der das richtige HH: MM-Format anzeigt

      public void onTimeSet(TimePicker view, int hourOfDay, int minute) { String AM_PM = " AM"; String mm_precede = ""; if (hourOfDay >= 12) { AM_PM = " PM"; if (hourOfDay >=13 && hourOfDay < 24) { hourOfDay -= 12; } else { hourOfDay = 12; } } else if (hourOfDay == 0) { hourOfDay = 12; } if (minute < 10) { mm_precede = "0"; } Toast.makeText(mContext, "" + hourOfDay + ":" + mm_precede + minute + AM_PM, Toast.LENGTH_SHORT).show(); } 

    Ich stieß auf das gleiche Problem. Ich habe einen TimePicker in meiner App, wo Sie, nachdem Sie eine Zeit gewählt und eine Taste gedrückt haben, zu einem Bildschirm geleitet werden, der anzeigt, welche Zeit gewählt wurde. Die gewählte “Zeit” war korrekt, aber manchmal war der AM / PM-Wert entgegengesetzt zu dem, was gewählt wurde. Ich habe es schließlich behoben, indem ich geändert habe, was ich für das “Stunden” -Argument vom TimePicker gespeichert habe.

     private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hrs, int mins) { hour = hrs; minute = mins; c = Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY, hour); //instead of c.set(Calendar.HOUR, hour); c.set(Calendar.MINUTE, minute); 

    Wenn ich nun auf die Taste klicke, um zum nächsten Bildschirm zu gelangen, zeigt es den korrekten AM / PM-Wert an.

    Probieren Sie diese einfache Methode aus:

      void openTimeFragment() { TimePickerDialog mTimePicker; final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); mTimePicker = new TimePickerDialog(YourActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { String time = selectedHour + ":" + selectedMinute; SimpleDateFormat fmt = new SimpleDateFormat("HH:mm"); Date date = null; try { date = fmt.parse(time ); } catch (ParseException e) { e.printStackTrace(); } SimpleDateFormat fmtOut = new SimpleDateFormat("hh:mm aa"); String formattedTime=fmtOut.format(date); edtTextTime.setText(formattedTime); } }, hour, minute, false);//No 24 hour time mTimePicker.setTitle("Select Time"); mTimePicker.show(); } 
      private String getTime(int hr,int min) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY,hr); cal.set(Calendar.MINUTE,min); Format formatter; formatter = new SimpleDateFormat("h:mm a"); return formatter.format(cal.getTime()); } 

    Versuche dies :

      Calendar calendar = Calendar.getInstance(); calendar.set(0, 0, 0, hourOfDay, minute, 0); long timeInMillis = calendar.getTimeInMillis(); java.text.DateFormat dateFormatter = new SimpleDateFormat("hh:mm a"); Date date = new Date(); date.setTime(timeInMillis); time.setText(dateFormatter.format(date)); 

    Wenn Ihre Erwartung war, AM / PM direkt in der Zeitauswahl-Dialogbox zu setzen, gibt es ein Problem. Dies funktioniert, wenn Sie den EditText mit der aktuellen / Standardzeit füllen. – Erhöhen Sie vor der Instanziierung des Dialogs die Stundenkomponente um 12, wenn EditText den PM-Zeitwert hat.

    sref_Time3 ist ein ampm-Wert; sref_Time1 ist eine Stundenkomponente.

      if (sref_Time3.equals("PM")) { hour = hour + 12; } else if (sref_Time1.equals("12")) { hour = 0; } // Create a new instance of TimePickerDialog and return it return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); 

    Danke und Grüße.

    Bildschirm Zeitauswahldialog

    Das funktioniert für mich:

     TimePickerDialog timePickerDialog = new TimePickerDialog(AddFocusActivity.this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { calendar.set(Calendar.MINUTE, minute); calendar.set(Calendar.HOUR,hourOfDay); time = calendar.get(Calendar.HOUR) + ((calendar.get(Calendar.AM_PM) == Calendar.AM) ? "am" : "pm"); Log.e("time",time); } },calendar.get(Calendar.HOUR_OF_DAY),calendar.get(Calendar.MINUTE), false); 
     public static class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the current time as the default values for the picker final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR); int minute = c.get(Calendar.MINUTE); // Create a new instance of TimePickerDialog and return it return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); } public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Calendar calendar = Calendar.getInstance(); calendar.set(0, 0, 0, hourOfDay, minute); textView.setText((String) DateFormat.format("hh:mm aaa", calendar)); } } //For showing the dialog put below two lines where you want to call TimePickerFragment timePickerFragment = new TimePickerFragment(); timePickerFragment.show(getSupportFragmentManager(), "TimePicker"); 

    Sie können meine Lösung versuchen, ich verwendete “hh: mm a” -Format, um AM / PM-Zeit einzustellen:

     SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a", Locale.ENGLISH); String formattedTime = formatter.format(myCalendar.getTime()); EditText.setText(formattedTime); 
     private TimePickerDialog.OnTimeSetListener timeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { boolean isPM = (hourOfDay >= 12); tvTime.setText(String.format("%02d:%02d %s", (hourOfDay == 12 || hourOfDay == 0) ? 12 : hourOfDay % 12, minute, isPM ? "PM" : "AM")); } }; 

    Ich weiß, es ist zu spät für die Antwort, und die perfekte Antwort ist bereits ausgewählt. Aber ich dachte, es ist nicht ganz klar für Anfänger, also posten Sie meine Antwort

     editText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub Calendar mcurrentTime = Calendar.getInstance(); int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY); int minute = mcurrentTime.get(Calendar.MINUTE); TimePickerDialog mTimePicker; mTimePicker = new TimePickerDialog(getActivity(), new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) { String AM_PM; if (selectedHour >=0 && selectedHour < 12){ AM_PM = "AM"; } else { AM_PM = "PM"; } editText.setText( selectedHour + ":" + selectedMinute+" "+AM_PM); } }, hour, minute, false); mTimePicker.setTitle("Select Time"); mTimePicker.show(); } }); 

    Probieren Sie es aus, ich hoffe, es wird Ihnen helfen

      int mHour; int mMin; StringBuilder stringBuilder = new StringBuilder(); TimePickerDialog timePickerDialog = new TimePickerDialog(context, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { mHour = hourOfDay; mMin = minute; String am_pm ; Calendar datetime = Calendar.getInstance(); datetime.set(Calendar.HOUR_OF_DAY, hourOfDay); datetime.set(Calendar.MINUTE, minute); am_pm = getTime(mHour,mMin); stringBuilder.append(" "); stringBuilder.append(am_pm); editTextDate.setText(stringBuilder); } }, mHour, mMin, false); timePickerDialog.show(); public String getTime(int hr, int min) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY,hr); cal.set(Calendar.MINUTE,min); Format formatter; formatter = new SimpleDateFormat("h:mm a"); return formatter.format(cal.getTime()); }