2010-04-17 2 views
40

У меня есть TimePickerDialog с is24Hour установлен в false, так как я хочу представить конечного пользователя более знакомый 12-часовой формат. Когда установлены индикатор часа, минуты и AM PM, и время возвращается, как я могу определить, выбрал ли конечный пользователь AM или PM?TimePickerDialog и 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 
    } 
}; 

ответ

56

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

+0

Огромное спасибо за быстрый ответ. Я не получил это из документации. – JDM

+5

Да, ну, на самом деле это не в документации ... :-) – CommonsWare

+14

вы можете получить 24-часовую настройку пользователя с этим: DateFormat.is24HourFormat (контекст); –

8

Я столкнулся с той же проблемой. У меня есть приложение 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.

+0

это правильный ответ, kudos –

+0

сделал трюк ... thanx – Satyavrat

31

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

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); 
} 
+0

Это было именно то, что я искал! Спасибо! – LargeGlasses

+0

@ LargeGlasses Happy, что это помогло вам :-) –

+0

Спасибо, что отлично работает ... !!!! –

10

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

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 

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

+1

+ голосовать за мое время :) –

+0

Большое спасибо .. сделал мою ночь: P –

8

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

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

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

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

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

sref_Time3 - значение ampm; 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())); 

Thanks & С уважением.

Screen Time Picker Dialog

1

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

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); 
0
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")); 
     } 
    }; 
1
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"); 
6

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

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(); 
    } 
+0

приятное и простое решение. Спасибо :) –

+0

@ Md.SajedulKarim: :) –

+0

сначала я игнорирую ваше решение и пробовал другие, но, в конце концов, его решил .. приятное решение спасибо. –

5
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()); 
    } 
1

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

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

Я знаю, что это слишком поздно для ответа, и идеальный ответ уже выбран , Но я думал, что это не совсем понятно для новичков, поэтому отправьте мой ответ

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(); 
     } 
    }); 
Смежные вопросы