TimePickerDialog 和 AM 或 PM

发布于 2024-08-29 10:18:37 字数 467 浏览 6 评论 0原文

我有一个 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
    }
};

I have a TimePickerDialog with is24Hour set to false since I want to present the end-user with the more familiar 12 hour format. When the hour, minute and AM PM indicator are set and the time is returned how can I identify whether the end-user has selected AM or PM?

This is what I have for the listener:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(25

策马西风 2024-09-05 10:18:37

hourOfDay 将始终为 24 小时制。如果您打开对话框时将 is24HourView 设置为 false,用户将不必处理 24 小时格式的时间,但 Android 会将其转换为 24 小时时间当它调用onTimeSet()时。

The hourOfDay will always be 24-hour. If you opened the dialog with is24HourView set to false, the user will not have to deal with 24-hour formatted times, but Android will convert that to a 24-hour time when it calls onTimeSet().

深居我梦 2024-09-05 10:18:37

这对我有用:

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

This worked for me:

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 );
}
千里故人稀 2024-09-05 10:18:37

我遇到了同样的问题。我的应用程序中有一个 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);

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

I was running into the same problem. I have a TimePicker in my app where after you choose a time and hit a button you'll be taken to a screen that showed what time was chosen. The "time" chosen was correct but sometimes the AM/PM value would be opposite of what was chosen. I finally fixed it by changing what I was storing for the "hrs" argument from the 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);

Now when I hit the button to go to the next screen it properly showed the correct AM/PM value chosen.

泛泛之交 2024-09-05 10:18:37

简洁的 Toast 消息,其中包含用户选择的内容,显示正确的 HH:MM 格式

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

a neat toast message with what user selected showing proper HH:MM format

    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();
    }
无所谓啦 2024-09-05 10:18:37

尝试这个简单的方法:

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

Try this simple method:

 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();
    }
自由如风 2024-09-05 10:18:37
 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());
    }
 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());
    }
那一片橙海, 2024-09-05 10:18:37

您好,您可以使用自己的格式,如下所示:

    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

Hi you could use your own format like this :

    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

I found that "a" is the code in formating time that represents AM-PM: http://www.tutorialspoint.com/java/java_date_time.htm

捂风挽笑 2024-09-05 10:18:37

如果您希望直接在时间选择器对话框中设置上午/下午,则有一个解决方法。如果您使用当前/默认时间预先填充 EditText,则此方法有效。
- 在实例化对话框之前,如果 EditText 具有 PM 时间值,请将小时部分增加 12。

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

谢谢&问候。

屏幕
时间选择器对话框

If your expectation was to directly set AM/PM in the Time Picker Dialog box, there is a work around. This works if you pre-populate the EditText with current/default time.
- Before instantiating the dialog, increase the hour component by 12 if EditText has PM time value.

sref_Time3 is ampm value; sref_Time1 is hour component.

    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 & Regards.

Screen
Time Picker Dialog

这样的小城市 2024-09-05 10:18:37

试试这个:

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

Try this :

        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));
真心难拥有 2024-09-05 10:18:37
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");
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");
再见回来 2024-09-05 10:18:37

这对我有用:

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

This works for me :

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);
柠北森屋 2024-09-05 10:18:37
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"));
        }
    };
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"));
        }
    };
铜锣湾横着走 2024-09-05 10:18:37

你可以试试我的解决方案,我使用了“hh:mm a”格式来设置AM/PM时间

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

You can try my solution, I used "hh:mm a" format to set AM/PM time:

SimpleDateFormat formatter = new SimpleDateFormat("hh:mm a", Locale.ENGLISH);
String  formattedTime = formatter.format(myCalendar.getTime()); 
EditText.setText(formattedTime);
热情消退 2024-09-05 10:18:37

试试这个,希望对你有帮助

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

Try this, Hope it will help you

 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());
}
糖粟与秋泊 2024-09-05 10:18:37

我知道现在回答已经太晚了,并且已经选择了完美的答案,但我认为对于初学者来说还不太清楚,所以发布我的答案

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

I know it's too late for answer, and perfect answer is already selected, But I thought it is not quite clear for beginners, so posting my answer

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();
        }
    });
你是年少的欢喜 2024-09-05 10:18:37

在使用 TimeDialog 获取时间并将其设置为 EditText 时,我发现如果“分钟”小于 0,例如:12:05,它会给出类似 12:5 的结果。在这段代码中,我已经解决了这个问题,并且如果您想要 12 小时格式,也可以正确使用 TimeDialog 来获取 AM/PM。将您的 onTimeSet() 替换为以下内容

public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                    String period;
                    int hour = 0;
                    String minute;
                    if(selectedMinute >= 0 && selectedMinute < 10)
                        minute = "0" + selectedMinute;
                    else
                        minute = String.valueOf(selectedMinute);
                    if(selectedHour >= 0 && selectedHour < 12)
                        period = "AM";
                    else
                        period = "PM";
                    if(period.equals("AM")){
                        if(selectedHour == 0)
                            hour = 12;
                        else if(selectedHour >= 1 && selectedHour < 12)
                            hour = selectedHour;
                    }else if(period.equals("PM")){
                        if(selectedHour == 12)
                            hour = 12;
                        else if(selectedHour >= 13 && selectedHour <= 23)
                            hour = selectedHour - 12;
                    }
                    String time = hour+":"+minute+" "+period;
                    currentText.setText(time);
                }
            }, hour, minute, false);

While using the TimeDialog to get the time and set it to an EditText, I have found that if the 'minutes' are less than 0, ex: 12:05, it giving like 12:5. Here in this code I've solved that issue and also properly using TimeDialog to get AM/PM if you want 12 hour format. Replace the your onTimeSet() with the following

public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                    String period;
                    int hour = 0;
                    String minute;
                    if(selectedMinute >= 0 && selectedMinute < 10)
                        minute = "0" + selectedMinute;
                    else
                        minute = String.valueOf(selectedMinute);
                    if(selectedHour >= 0 && selectedHour < 12)
                        period = "AM";
                    else
                        period = "PM";
                    if(period.equals("AM")){
                        if(selectedHour == 0)
                            hour = 12;
                        else if(selectedHour >= 1 && selectedHour < 12)
                            hour = selectedHour;
                    }else if(period.equals("PM")){
                        if(selectedHour == 12)
                            hour = 12;
                        else if(selectedHour >= 13 && selectedHour <= 23)
                            hour = selectedHour - 12;
                    }
                    String time = hour+":"+minute+" "+period;
                    currentText.setText(time);
                }
            }, hour, minute, false);
毁梦 2024-09-05 10:18:37

此方法使用现有的格式功能,并且 am/pm 和 24h 格式之间的决定取决于 timePickerDialog 打开时是否支持 24 小时。科特林示例。

val timePickerDialog = TimePickerDialog(
    requireContext(), TimePickerDialog.OnTimeSetListener { timePicker, hourOfDay, minutes ->

        val datetime = Calendar.getInstance()
        datetime.set(Calendar.HOUR_OF_DAY, hourOfDay)
        datetime.set(Calendar.MINUTE, minutes)

        val timeFormatAmPm = SimpleDateFormat("hh:mm aa")
        val timeFormat24Hours = SimpleDateFormat("HH:mm")

        timeEditTextView.setText(
            when (timePicker.is24HourView) {
                true -> timeFormat24Hours.format(datetime.time)
                false -> timeFormatAmPm.format(datetime.time)
            }
        )
    },
    currentHour, currentMinute, is24HourFormat
)

BR马蒂亚斯

This approach uses existing format functionality and the decision between am/pm and 24h format is based on if the timePickerDialog was opened with 24 hours support or not. Kotlin example.

val timePickerDialog = TimePickerDialog(
    requireContext(), TimePickerDialog.OnTimeSetListener { timePicker, hourOfDay, minutes ->

        val datetime = Calendar.getInstance()
        datetime.set(Calendar.HOUR_OF_DAY, hourOfDay)
        datetime.set(Calendar.MINUTE, minutes)

        val timeFormatAmPm = SimpleDateFormat("hh:mm aa")
        val timeFormat24Hours = SimpleDateFormat("HH:mm")

        timeEditTextView.setText(
            when (timePicker.is24HourView) {
                true -> timeFormat24Hours.format(datetime.time)
                false -> timeFormatAmPm.format(datetime.time)
            }
        )
    },
    currentHour, currentMinute, is24HourFormat
)

BR Matthias

辞取 2024-09-05 10:18:37
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
    SimpleDateFormat timeFormat = new SimpleDateFormat("h:mm a", Locale.getDefault());
Calendar mCurrentTime = Calendar.getInstance();                
mCurrentTime.set(Calendar.HOUR_OF_DAY, selectedHour);
mCurrentTime.set(Calendar.MINUTE, selectedMinute);
mCurrentTime.clear(Calendar.SECOND);
String time = timeFormat.format(mCurrentTime.getTimeInMillis());
tvTime.setText(time.toLowerCase());}
@Override
public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
    SimpleDateFormat timeFormat = new SimpleDateFormat("h:mm a", Locale.getDefault());
Calendar mCurrentTime = Calendar.getInstance();                
mCurrentTime.set(Calendar.HOUR_OF_DAY, selectedHour);
mCurrentTime.set(Calendar.MINUTE, selectedMinute);
mCurrentTime.clear(Calendar.SECOND);
String time = timeFormat.format(mCurrentTime.getTimeInMillis());
tvTime.setText(time.toLowerCase());}
梦冥 2024-09-05 10:18:37

无论您将 is24Hour 设置为 false 还是 true,您总是会在“onTimeSet()”方法中根据 24 小时格式收到“hourOfDay”。
例如:- 如果您将“is24Hour”设置为 false 并选择晚上 8 点,则“onTimeSet()”方法中“hourOfDay”的值将为 20。
然后你可以像这样设置你的 Am 和 Pm :

 public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {

            String minute_precede = "", hour_precede = "", finalTIme = "", amOrPm = "";
            int hourValue = 0;

            Calendar datetime = Calendar.getInstance();
            datetime.set(Calendar.HOUR_OF_DAY, hourOfDay);
            datetime.set(Calendar.MINUTE, minute);

            if (datetime.get(Calendar.AM_PM) == Calendar.AM) {
                amOrPm = "AM";
                if (hourOfDay == 0)
                    hourValue = 12;
                else
                    hourValue = hourOfDay;
            } else if (datetime.get(Calendar.AM_PM) == Calendar.PM) {
                amOrPm = "PM";
                if (hourOfDay == 12)
                    hourValue = 12;
                else if (hourOfDay >= 13 && hourOfDay <= 23)
                    hourValue = hourOfDay - 12;
            }
            if (hourValue < 10)
                hour_precede = "0";
            if (minute < 10)
                minute_precede = "0";
            finalTIme = hour_precede + hourValue + ":" + minute_precede + minute + " " + amOrPm;
            mTimeEditText.setText(finalTIme);

        }

Whether you set is24Hour to false or true you always receive "hourOfDay" according to 24 hour format in "onTimeSet()" method.
Ex :- if you set "is24Hour" to false and select 8 pm then the value of "hourOfDay" in "onTimeSet()" method will be 20.
and then you can set Your Am and Pm like this :

 public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {

            String minute_precede = "", hour_precede = "", finalTIme = "", amOrPm = "";
            int hourValue = 0;

            Calendar datetime = Calendar.getInstance();
            datetime.set(Calendar.HOUR_OF_DAY, hourOfDay);
            datetime.set(Calendar.MINUTE, minute);

            if (datetime.get(Calendar.AM_PM) == Calendar.AM) {
                amOrPm = "AM";
                if (hourOfDay == 0)
                    hourValue = 12;
                else
                    hourValue = hourOfDay;
            } else if (datetime.get(Calendar.AM_PM) == Calendar.PM) {
                amOrPm = "PM";
                if (hourOfDay == 12)
                    hourValue = 12;
                else if (hourOfDay >= 13 && hourOfDay <= 23)
                    hourValue = hourOfDay - 12;
            }
            if (hourValue < 10)
                hour_precede = "0";
            if (minute < 10)
                minute_precede = "0";
            finalTIme = hour_precede + hourValue + ":" + minute_precede + minute + " " + amOrPm;
            mTimeEditText.setText(finalTIme);

        }
何以笙箫默 2024-09-05 10:18:37

这是获取上午、下午选定时间的最简单方法

Calendar mcurrentTime = Calendar.getInstance();
            int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
            int minute = mcurrentTime.get(Calendar.MINUTE);
            TimePickerDialog mTimePicker;
            mTimePicker = new TimePickerDialog(Quiz_Add.this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                    String strHour=String.valueOf(selectedHour), strMin=String.valueOf(selectedMinute), strAM_PM;
                    // if(strHour.length()==1) strHour="0" + strHour;
                    if(strMin.length()==1) strMin="0" + strMin;

                    if(selectedHour==0){
                        selectedHour+=12;   strAM_PM="AM";
                    }else if(selectedHour==12){
                        strAM_PM="PM";
                    }else if(selectedHour>12){
                        selectedHour=selectedHour-12;   strAM_PM="PM";
                    }else{
                        strAM_PM="AM";
                    }

                    txtTm.setText( selectedHour + ":" + strMin + " " + strAM_PM);
                }
            }, hour, minute, false);//Yes 24 hour time
            mTimePicker.setTitle("Select Time");
            mTimePicker.show();

这样您将始终获得正确的上午或下午选定时间

This is the simplest method to get selected time in AM, PM

Calendar mcurrentTime = Calendar.getInstance();
            int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
            int minute = mcurrentTime.get(Calendar.MINUTE);
            TimePickerDialog mTimePicker;
            mTimePicker = new TimePickerDialog(Quiz_Add.this, new TimePickerDialog.OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                    String strHour=String.valueOf(selectedHour), strMin=String.valueOf(selectedMinute), strAM_PM;
                    // if(strHour.length()==1) strHour="0" + strHour;
                    if(strMin.length()==1) strMin="0" + strMin;

                    if(selectedHour==0){
                        selectedHour+=12;   strAM_PM="AM";
                    }else if(selectedHour==12){
                        strAM_PM="PM";
                    }else if(selectedHour>12){
                        selectedHour=selectedHour-12;   strAM_PM="PM";
                    }else{
                        strAM_PM="AM";
                    }

                    txtTm.setText( selectedHour + ":" + strMin + " " + strAM_PM);
                }
            }, hour, minute, false);//Yes 24 hour time
            mTimePicker.setTitle("Select Time");
            mTimePicker.show();

This way you will always get the correct selected time with AM or PM

月牙弯弯 2024-09-05 10:18:37

在 Kotlin 中

        val calenderInstance = Calendar.getInstance()
        val hr = calenderInstance[Calendar.HOUR_OF_DAY]
        val min = calenderInstance[Calendar.MINUTE]
        val onTimeListner =
            OnTimeSetListener { view, hourOfDay, minute ->
                if (view.isShown) {
                    calenderInstance[Calendar.HOUR_OF_DAY] = hourOfDay
                    calenderInstance[Calendar.MINUTE] = minute

                    Log.e("@@time",hourOfDay.toString()+" "+minute.toString())
                }
            }
        val timePickerDialog = TimePickerDialog(
            this@BlockDateActivity,
            android.R.style.Theme_Holo_Light_Dialog_NoActionBar,
            onTimeListner, hr, min, false
        )
          timePickerDialog.setTitle("Set Time")
        Objects.requireNonNull(timePickerDialog.window)!!
            .setBackgroundDrawableResource(android.R.color.transparent)
        timePickerDialog.show()

In Kotlin

        val calenderInstance = Calendar.getInstance()
        val hr = calenderInstance[Calendar.HOUR_OF_DAY]
        val min = calenderInstance[Calendar.MINUTE]
        val onTimeListner =
            OnTimeSetListener { view, hourOfDay, minute ->
                if (view.isShown) {
                    calenderInstance[Calendar.HOUR_OF_DAY] = hourOfDay
                    calenderInstance[Calendar.MINUTE] = minute

                    Log.e("@@time",hourOfDay.toString()+" "+minute.toString())
                }
            }
        val timePickerDialog = TimePickerDialog(
            this@BlockDateActivity,
            android.R.style.Theme_Holo_Light_Dialog_NoActionBar,
            onTimeListner, hr, min, false
        )
          timePickerDialog.setTitle("Set Time")
        Objects.requireNonNull(timePickerDialog.window)!!
            .setBackgroundDrawableResource(android.R.color.transparent)
        timePickerDialog.show()
谢绝鈎搭 2024-09-05 10:18:37

这是一个简单的 timePickerUtil:

class TimePickerHelper(
    val context: Context,
    private val inputTime: String,
    val callback: (time: String) -> Unit
) {
    fun showPicker() {
        var hour = 0
        var minute = 0
        val formattedInputTime = covertDate(
            inputTime,
            Constants.DateFormats.HH_MM_A,
            Constants.DateFormats.HH_MM
        )
        if (formattedInputTime.isNotEmpty()) {
            val arr = formattedInputTime.split(":")
            hour = arr[0].toInt()
            minute = arr[1].toInt()
        }
        val timePickerDialog = TimePickerDialog(
            context,
            { view, h, m ->
                callback(
                    covertDate(
                        "$h:$m",
                        Constants.DateFormats.HH_MM,
                        Constants.DateFormats.HH_MM_A
                    )
                )
            },
            hour,
            minute,
            false
        )
        timePickerDialog.show()
    }

}



@SuppressLint("SimpleDateFormat")
fun covertDate(date: String, inputFormat: String, outputFormat: String): String {
    var formattedDate = ""
    try {
        val dateObject =
            SimpleDateFormat(inputFormat).parse(date)
        formattedDate = SimpleDateFormat(outputFormat).format(dateObject)
    } catch (e: Exception) {
        Timber.e(e)
    }

    return formattedDate
}

//Belongs to Constants class
    object DateFormats {
            const val TIME_STAMP_WITH_ZONE: String = "yyyy-MM-dd'T'HH:mm:ss.s"
            const val MMM_YYYY: String = "MMM YYYY"
            const val DD_MM_YY: String = "dd/MM/yy"
            const val HH_MM_A: String = "hh:mm aa"
            const val HH_MM: String = "HH:mm"
        }

here is a simple timePickerUtil:

class TimePickerHelper(
    val context: Context,
    private val inputTime: String,
    val callback: (time: String) -> Unit
) {
    fun showPicker() {
        var hour = 0
        var minute = 0
        val formattedInputTime = covertDate(
            inputTime,
            Constants.DateFormats.HH_MM_A,
            Constants.DateFormats.HH_MM
        )
        if (formattedInputTime.isNotEmpty()) {
            val arr = formattedInputTime.split(":")
            hour = arr[0].toInt()
            minute = arr[1].toInt()
        }
        val timePickerDialog = TimePickerDialog(
            context,
            { view, h, m ->
                callback(
                    covertDate(
                        "$h:$m",
                        Constants.DateFormats.HH_MM,
                        Constants.DateFormats.HH_MM_A
                    )
                )
            },
            hour,
            minute,
            false
        )
        timePickerDialog.show()
    }

}



@SuppressLint("SimpleDateFormat")
fun covertDate(date: String, inputFormat: String, outputFormat: String): String {
    var formattedDate = ""
    try {
        val dateObject =
            SimpleDateFormat(inputFormat).parse(date)
        formattedDate = SimpleDateFormat(outputFormat).format(dateObject)
    } catch (e: Exception) {
        Timber.e(e)
    }

    return formattedDate
}

//Belongs to Constants class
    object DateFormats {
            const val TIME_STAMP_WITH_ZONE: String = "yyyy-MM-dd'T'HH:mm:ss.s"
            const val MMM_YYYY: String = "MMM YYYY"
            const val DD_MM_YY: String = "dd/MM/yy"
            const val HH_MM_A: String = "hh:mm aa"
            const val HH_MM: String = "HH:mm"
        }
勿忘初心 2024-09-05 10:18:37

下面的 Kotlin 代码非常简单。每个人都会犯的一个常见错误是用 ** 符号表示。

        val cal = Calendar.getInstance()
        val timeSetListner = TimePickerDialog.OnTimeSetListener { view, hourOfDay, minute ->
            cal.set(Calendar.HOUR_OF_DAY,hourOfDay)
            cal.set(Calendar.MINUTE,minute)

            var am_or_pm : String = ""
            if (hourOfDay>12) {
                am_or_pm = "PM"
            }

            else {
                am_or_pm = "AM"
            }
            
            **//In Below Code Time Format Should be in small letters ie, hh:mm
            **//If enter HH:mm the result will be wrong

            val text = SimpleDateFormat("hh:mm").format(cal.time)
            binding.wakeupTimeChangeText.setText(text+ am_or_pm)
        }
        TimePickerDialog(requireContext(),timeSetListner,cal.get(Calendar.HOUR_OF_DAY),cal.get(Calendar.MINUTE),false)
            .show()

The Following Code in Kotlin is very Simple and Easy. A common mistake everyone make is shown with ** Sign.

        val cal = Calendar.getInstance()
        val timeSetListner = TimePickerDialog.OnTimeSetListener { view, hourOfDay, minute ->
            cal.set(Calendar.HOUR_OF_DAY,hourOfDay)
            cal.set(Calendar.MINUTE,minute)

            var am_or_pm : String = ""
            if (hourOfDay>12) {
                am_or_pm = "PM"
            }

            else {
                am_or_pm = "AM"
            }
            
            **//In Below Code Time Format Should be in small letters ie, hh:mm
            **//If enter HH:mm the result will be wrong

            val text = SimpleDateFormat("hh:mm").format(cal.time)
            binding.wakeupTimeChangeText.setText(text+ am_or_pm)
        }
        TimePickerDialog(requireContext(),timeSetListner,cal.get(Calendar.HOUR_OF_DAY),cal.get(Calendar.MINUTE),false)
            .show()
同展鸳鸯锦 2024-09-05 10:18:37

这是 TimePicker 的一个工作示例,它已从系统默认值(24 小时)转换为(AM 和 PM 的 12 小时),我已将其影响到我的 FormField

onTap: () {

    showTimePicker(builder: (context, childWidget) {
            return MediaQuery(
                data: MediaQuery.of(context).copyWith(
                    // Using 24-Hour format
                    alwaysUse24HourFormat: false),
                // If you want 12-Hour format, just change alwaysUse24HourFormat to false or remove all the builder argument
                child: childWidget!);
        },
        context: context,
        initialTime: TimeOfDay.now()
    ).then((value) {
        if (value != null) {
            if (value.period == DayPeriod.am) {
                timeController.text = value.format(context) + " AM";
            } else {
                timeController.text = value.format(context) + " PM";
            }

        }

    }).catchError((error) {
        print('the Error is : ${error.toString()}');
    });
},

This is a working example of the TimePicker that has been transformed from system default (24h) to (12h with AM and PM) and I have affected that to my FormField:

onTap: () {

    showTimePicker(builder: (context, childWidget) {
            return MediaQuery(
                data: MediaQuery.of(context).copyWith(
                    // Using 24-Hour format
                    alwaysUse24HourFormat: false),
                // If you want 12-Hour format, just change alwaysUse24HourFormat to false or remove all the builder argument
                child: childWidget!);
        },
        context: context,
        initialTime: TimeOfDay.now()
    ).then((value) {
        if (value != null) {
            if (value.period == DayPeriod.am) {
                timeController.text = value.format(context) + " AM";
            } else {
                timeController.text = value.format(context) + " PM";
            }

        }

    }).catchError((error) {
        print('the Error is : ${error.toString()}');
    });
},
以往的大感动 2024-09-05 10:18:37
    private void OnTimeSet(object sender, TimePickerDialog.TimeSetEventArgs e)
    {
        if (e.HourOfDay == 0)
        {

            hour += 12;
            format = "AM";
            Hour = (e.HourOfDay + 12).ToString();
        }
        else if (e.HourOfDay == 12)
        {
            format = "PM";
            Hour = (e.HourOfDay).ToString();
        }
        else if (e.HourOfDay > 12)
        {
            hour -= 12;
            format = "PM";
            Hour = (e.HourOfDay - 12).ToString();
        }
        else
        {
            format = "AM";
            Hour = (e.HourOfDay).ToString();
        }
        minute = e.Minute;
        string selectedTime = ("" + Hour.ToString().PadLeft(2, '0') + ":" + 
        minute.ToString().PadLeft(2, '0') + " " + format);
        LatestTime.Text = selectedTime;
    }
    private void OnTimeSet(object sender, TimePickerDialog.TimeSetEventArgs e)
    {
        if (e.HourOfDay == 0)
        {

            hour += 12;
            format = "AM";
            Hour = (e.HourOfDay + 12).ToString();
        }
        else if (e.HourOfDay == 12)
        {
            format = "PM";
            Hour = (e.HourOfDay).ToString();
        }
        else if (e.HourOfDay > 12)
        {
            hour -= 12;
            format = "PM";
            Hour = (e.HourOfDay - 12).ToString();
        }
        else
        {
            format = "AM";
            Hour = (e.HourOfDay).ToString();
        }
        minute = e.Minute;
        string selectedTime = ("" + Hour.ToString().PadLeft(2, '0') + ":" + 
        minute.ToString().PadLeft(2, '0') + " " + format);
        LatestTime.Text = selectedTime;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文