TimePickerDialog和AM或PM

JDM*_*JDM 51 android timepicker

我有一个将is24Hour设置为false的TimePickerDialog,因为我想向最终用户呈现更熟悉的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
    }
};
Run Code Online (Sandbox Code Playgroud)

Com*_*are 68

hourOfDay永远是24小时.如果您打开is24HourView设置为的对话框false,则用户无需处理24小时格式化的时间,但Android会在调用时将其转换为24小时onTimeSet().

  • 你可以用这个获得用户首选的24小时设置:DateFormat.is24HourFormat(context); (14认同)
  • 是的,好吧,它不是真的在文档...... :-) (5认同)
  • @Shubh:如果 `hourOfDay` 为 12 或更高,则 AM/PM 指标将为 PM。当然,这与 Android 无关,一切都与了解 12 小时与 24 小时的时间约定有关。 (2认同)

Adi*_*lik 32

这对我有用:

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 );
}
Run Code Online (Sandbox Code Playgroud)


joe*_*ves 13

我遇到了同样的问题.我的应用程序中有一个TimePicker,在您选择一个时间并按下一个按钮后,您将进入一个显示所选时间的屏幕.选择的"时间"是正确的,但有时AM/PM值与所选择的相反.我最后通过改变我为TimePicker中的"hrs"参数存储的内容来修复它.

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);
Run Code Online (Sandbox Code Playgroud)

现在,当我按下按钮进入下一个屏幕时,它正确显示了所选的正确AM/PM值.

  • 更改为 HOUR_OF_DAY 而不是 HOUR 是通过相反设置 AM/PM 问题解决的。创建新的 TimePickerDialog 时还必须为小时参数设置 HOUR_OF_DAY,以便对话框在首次打开时选择正确的 AM/PM (2认同)

Ami*_*irG 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
Run Code Online (Sandbox Code Playgroud)

我发现"a"是代表AM-PM的格式化时间代码:http://www.tutorialspoint.com/java/java_date_time.htm


Dav*_*run 10

用户选择显示正确的HH:MM格式的整洁的Toast消息

    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();
    }
Run Code Online (Sandbox Code Playgroud)


Neh*_*agi 9

试试这个简单的方法:

 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();
    }
Run Code Online (Sandbox Code Playgroud)


Ron*_*ley 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());
    }
Run Code Online (Sandbox Code Playgroud)