12

我在将 24 小时格式转换为 12 小时格式时遇到问题。这是我的代码。

    private TimePickerDialog.OnTimeSetListener mTimeSetListener =
        new TimePickerDialog.OnTimeSetListener() {

            @Override
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                // TODO Auto-generated method stub
                ViewGroup vg=(ViewGroup) view.getChildAt(0);
                hour = hourOfDay;
                minutes = minute;
                String am_pm = (hourOfDay < 12) ? "AM" : "PM";
                SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a",Locale.US);
                String tme = hour +":"+ minutes+am_pm;
                et1.setText(tme);
            }
        };

我从警报对话框切换到时间选择器对话框,因为我不知道如何将 24 小时制更改为 12 小时制

et1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                new TimePickerDialog(MainActivity.this, mTimeSetListener, hour, minutes, false).show();
            }
        });

    }  

这证明我已经将布尔印象变为错误。

4

7 回答 7

19

试试这个-

private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // TODO Auto-generated method stub
        hour = hourOfDay;
        minutes = minute;
        String timeSet = "";
        if (hour > 12) {
          hour -= 12;
          timeSet = "PM";
        } else if (hour == 0) {
          hour += 12;
          timeSet = "AM";
        } else if (hour == 12){
          timeSet = "PM";
        }else{
          timeSet = "AM";
        }

        String min = "";
        if (minutes < 10)
         min = "0" + minutes ;
        else
         min = String.valueOf(minutes);

        // Append in a StringBuilder
        String aTime = new StringBuilder().append(hour).append(':')
        .append(min ).append(" ").append(timeSet).toString();
        et1.setText(aTime);
    }
};
于 2013-12-17T09:16:40.240 回答
8

我知道我为时已晚,但只有两行就完美了。

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"));
        }
    };
于 2015-11-19T09:07:41.487 回答
5

我就是这样做的。格式 SimpleDateFormat 采用https://developer.android.com/reference/java/text/SimpleDateFormat.html#format

TimePickerDialog timePickerDialog=  new TimePickerDialog(NotificationActivity.this,
    new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker timePicker, int hour, int minute) {

            Time time = new Time(hour, minute, 0);

            //little h uses 12 hour format and big H uses 24 hour format
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("h:mma");

            //format takes in a Date, and Time is a sublcass of Date
            String s = simpleDateFormat.format(time);
            toTime.setText(s);
        }
    }, hour, minute, false);
于 2017-02-26T20:17:02.990 回答
3

有一个构造函数参数

public TimePickerDialog (Context context, TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)

文档。对于格式化使用android.text.format.DateFormat

于 2013-12-17T08:38:00.883 回答
1

请尝试使用此代码

  int Hour=0;
int Minute=0;
int new_hour=0;
 String new_minute=null;
TimePickerDialog.OnTimeSetListener time = new TimePickerDialog.OnTimeSetListener() {



public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
         Hour = hourOfDay;
         Minute = minute;

        String time_form = hourOfDay + ":" + minute + ":00";
        int r = minute / 10;
        if (r == 0) {
            new_minute = "0" + minute;
        } else {
            new_minute = minute + "";
        }
        if (Hour > 12) {
            new_hour = (hourOfDay - 12);
            edit_text.setText(new StringBuilder().append(new_hour)
                    .append(":").append(new_minute)
                    + " PM");
        } else if (Hour == 12) {

            new_hour = hourOfDay;
            edit_text.setText(new StringBuilder().append(new_hour)
                    .append(":").append(new_minute)
                    + " PM");
        }

        else {
            new_hour = hourOfDay;
            edit_text.setText(new StringBuilder().append(new_hour)
                    .append(":").append(new_minute)
                    + " AM");
        }

    }

};
于 2013-12-17T09:26:56.073 回答
0

你为什么不使用

timePicker.setIs24HourView(false);

于 2013-12-17T08:32:37.170 回答
0

这也将解决您的初始 0 问题

String time = "", md = " AM";
if(selectedHour == 0) selectedHour = 12;
else if(selectedHour > 12) {selectedHour -= 12; md = " PM";}
else if(selectedHour == 12) md = " PM";

if(selectedHour < 10) time = "0";
time += selectedHour;
time += ":";
if(selectedMinute < 10) time += "0";
time += selectedMinute;
time += md;
et_time.setText(time);

输出 例如:02:05 AM 而不是 2:5

于 2018-09-25T11:46:24.437 回答