TimePickerDialog и AM или PM - PullRequest
       60

TimePickerDialog и AM или PM

46 голосов
/ 18 апреля 2010

У меня TimePickerDialog с is24Hour, установленным в false, так как я хочу представить конечному пользователю более знакомый 12-часовой формат. Когда индикатор часов, минут и AM PM установлен, а время возвращено, как я могу определить, выбрал ли конечный пользователь AM или PM?

Вот что у меня есть для слушателя:

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
    }
};

Ответы [ 17 ]

63 голосов
/ 18 апреля 2010

hourOfDay всегда будет 24-часовой. Если вы открыли диалоговое окно с is24HourView, установленным на false, пользователю не придется иметь дело с 24-часовым форматированным временем, но Android преобразует его в 24-часовое время при вызове onTimeSet().

31 голосов
/ 20 февраля 2013

Это сработало для меня:

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 );
}
10 голосов
/ 30 декабря 2011

Я столкнулся с той же проблемой. У меня есть приложение TimePicker, в котором после выбора времени и нажатия кнопки вы попадете на экран, показывающий, какое время было выбрано. Выбранное «время» было правильным, но иногда значение AM / PM было бы противоположным выбранному. Я наконец исправил это, изменив то, что я сохранял для аргумента «hrs» из TimePicker.

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);

Теперь, когда я нажал кнопку, чтобы перейти к следующему экрану, он правильно показал правильное выбранное значение AM / PM.

10 голосов
/ 07 августа 2015

аккуратное сообщение с выбранным пользователем, показывающее правильный формат ЧЧ: ММ

    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();
    }
10 голосов
/ 06 июня 2014

Привет, вы можете использовать свой собственный формат, например:

    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

Я обнаружил, что "a" - это код во время форматирования, представляющий AM-PM: http://www.tutorialspoint.com/java/java_date_time.htm

9 голосов
/ 13 сентября 2016

Попробуйте этот простой метод:

 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();
    }
5 голосов
/ 31 января 2017
 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());
    }
2 голосов
/ 02 октября 2015

Если вы ожидали установить прямую AM / PM в диалоговом окне Time Picker, есть обходной путь. Это работает, если вы предварительно заполнили EditText текущим временем / временем по умолчанию. - Перед созданием диалогового окна увеличьте часовой компонент на 12, если EditText имеет значение времени PM.

sref_Time3 - значение амперметра; sref_Time1 - часовой компонент.

    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()));

Спасибо и всего наилучшего.

Screen Time Picker Dialog

2 голосов
/ 01 сентября 2015

Попробуйте это:

        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));
1 голос
/ 06 июля 2017

Вы можете попробовать мое решение, я использовал "чч: мм а" формат для установки AM / PM время :

SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a", Locale.ENGLISH);
String  formattedTime = formatter.format(myCalendar.getTime()); 
EditText.setText(formattedTime);
...