средство выбора времени, показывающее время как 4:7 вместо 04:07

У меня есть функция выбора времени, которая устанавливает время в EditText . Но формат, который он показывает, не подходит. например, для 16:07 отображается как 4:7. всякий раз, когда цифра времени меньше 10, она автоматически удаляет 0. Пожалуйста, помогите мне. Мой код

        if (v == btnTimePicker1)
               {

                // Process to get Current Time
                final Calendar c = Calendar.getInstance();
                mHour = c.get(Calendar.HOUR_OF_DAY);
                mMinute = c.get(Calendar.MINUTE);

                // Launch Time Picker Dialog
                TimePickerDialog tpd = new TimePickerDialog(this,
                        new TimePickerDialog.OnTimeSetListener() {

                            @Override
                            public void onTimeSet(TimePicker view, int hourOfDay,
                                    int minute) {
                                // Display Selected time in textbox
                                txtTime1.setText(hourOfDay + ":" + minute);
                            }
                        }, mHour, mMinute, false);
                tpd.show();




            }

person Tushar Narang    schedule 02.04.2014    source источник
comment
Вам нужно установить его вручную..'   -  person Chirag Ghori    schedule 02.04.2014
comment
проверьте значение hourOfDay и minute, если меньше 10, измените его на строку и добавьте 0   -  person Shayan Pourvatan    schedule 02.04.2014
comment
Я пробовал так, но не смог, подскажите, пожалуйста, как правильно   -  person Tushar Narang    schedule 02.04.2014
comment
code private static String pad(int c) { if (c ›= 10) return String.valueOf(c); иначе вернуть 0 + String.valueOf(c); }   -  person Tushar Narang    schedule 02.04.2014


Ответы (7)


Просто измените строку:

txtTime1.setText(hourOfDay + ":" + minute);

to:

txtTime1.setText(String.format("%02d:%02d", hourOfDay, minute));

и все будет хорошо.

Если вам нужны 12-часовые часы вместо 24-часовых, замените эту строку на эти:

int hour = hourOfDay % 12;
if (hour == 0)
    hour = 12;
txtTime1.setText(String.format("%02d:%02d %s", hour, minute, 
                               hourOfDay < 12 ? "am" : "pm"));

или вы можете сделать это всего за 2 строки:

int hour = hourOfDay % 12;    
txtTime1.setText(String.format("%02d:%02d %s", hour == 0 ? 12 : hour,
                               minute, hourOfDay < 12 ? "am" : "pm"));
person scottt    schedule 02.04.2014
comment
Этот ответ следует принять один, потому что String.format(%02d:%02d, hourOfDay, minute) имеет смысл вместо проверки if - person Swap-IOS-Android; 25.02.2015
comment
Не могли бы вы объяснить, что означает выражение регулярного выражения? - person most venerable sir; 19.10.2018
comment
Регулярное выражение не используется. Если вы имеете в виду %02d:%02d %s, это строковый формат. В них каждый %02d указывает параметр замены, который будет двузначным числом с ведущими нулями, а %s указывает строку замены. Таким образом, первый %02d будет отображать часы как 2 цифры, следующий будет отображать минуты как 2 цифры, а %s будет отображать либо am, либо pm. Документы можно найти здесь: docs.oracle.com /javase/8/docs/api/java/util/Formatter.html . - person scottt; 19.10.2018
comment
Большое спасибо за решение, сэкономил много моего времени! - person hetsgandhi; 13.07.2019

Логика проста, я просто обрезал ответы выше

просто замените строку, в которой мы устанавливаем время в editText, на

txtTime.setText(pad(hourOfDay) + ":" + pad(minute));

затем добавьте для него функцию, т.е.

       public String pad(int input) 
         {

            String str = "";

            if (input > 10) {

                str = Integer.toString(input);
            } else {
                str = "0" + Integer.toString(input);

            }
            return str;
        }
person Tushar Narang    schedule 02.04.2014

Вы можете проверить, если часы и минуты меньше десяти. Если это так, вы просто добавляете «0» перед этой конкретной строкой. Просто измените свой код следующим образом:

@Override
    public void onTimeSet(TimePicker view, int hourOfDay,
    int minute) {
        // Display Selected time in textbox

        String hourString;
        if (hourOfDay < 10)
            hourString = "0" + hourOfDay;
        else
            hourString = "" +hourOfDay;

        String minuteSting;
        if (minute < 10)
            minuteSting = "0" + minute;
        else
            minuteSting = "" +minute;

        txtTime1.setText(hourString + ":" + minuteSting);
    }
person W3hri    schedule 02.04.2014

Сначала нужно создать одну функцию, которая проверяет ваш ввод и преобразует его в строку в соответствии с условием.

public String pad(int input) {
    if (input >= 10) {
        return String.valueOf(input);
    } else {
        return "0" + String.valueOf(input);
    }
}

Затем вы можете позвонить так

 txtTime1.setText(pad(hourOfDay) + ":" + pad(minute));
person Chirag Ghori    schedule 02.04.2014

Вы можете использовать следующий код -

  public void onTimeSet(TimePicker view, int hourOfDay, int minuteOfDay) {
   int hour;
   String minute, amOrPm;
   if (hourOfDay > 12) {
    hour = hourOfDay - 12;
    amOrPm= "PM";
   } else {
    hour = hourOfDay;
    amOrPm = "AM";
   }
   if(minuteOfDay < 10) {
      minute = "0"+minuteOfDay;
   } else {
      minute = "" + minuteOfDay;
   }
   txtTime1.setText(hour + " : " + minute + " " + amOrPm);
  }
person crazyPixel    schedule 02.04.2014

Попробуй это

simpleTimePicker1 = (TimePicker) findViewById(R.id.timedawn);
simpleTimePicker1.setIs24HourView(true);
simpleTimePicker1.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
    @Override
    public void onTimeChanged(TimePicker view, int hourOfDay1, int minute1 ) {

        String shour1 = String.valueOf(hourOfDay1);
        String sminute1 = String.valueOf(minute1);


        if ((shour1.length() == 1 ) && (sminute1.length() == 1)) {
            sHour1= "0" + shour1;
            sMinute1= "0" + sminute1;
        }
        else if ((shour1.length() == 2 ) && (sminute1.length() == 1)) {
            sHour1= shour1;
            sMinute1= "0" + sminute1;
        }
        else if ((shour1.length() == 1 ) && (sminute1.length() == 2)) {
            sHour1= "0" + shour1;
            sMinute1= sminute1;
        }
        else{
            sHour1= shour1;
            sMinute1= sminute1;
        }
        String timew = sHour1+":" + sMinute1;
        time3=timew;
    }

});
person Jimbee    schedule 06.05.2018

Я могу немного опоздать на вечеринку, но это наверняка поможет кому-то еще.

 private String getTime(int hr, int min) {
    Time tme = new Time(hr, min, 0);//seconds by default set to zero
    Format formatter;
    formatter = new SimpleDateFormat("h:mm a");
    return formatter.format(tme);
}
person himanshu Verma    schedule 03.04.2019