【问题标题】:Timepicker displaying time incorrectly时间选择器显示时间不正确
【发布时间】:2014-01-31 08:32:20
【问题描述】:

我遇到了一个奇怪的问题。当我尝试使用 Time-picker 选择时间时,我得到了一个奇怪的结果。

例如,如果我将时间设置为11:04,则输出为11:4 ???

另外,如果我将时间设置为12:30,则输出为12:3 ???

//Time Picker Dialog
protected Dialog onCreateDialog(int id)
{
    switch(id)
    {
    case dialog_id:
        return new TimePickerDialog(this, mTimeSetListener, hour, minute, false);
    }       
    return null;
}

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

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int hour_minute) 
    {
        hour = hourOfDay;
        minute = hour_minute;

        if (hourOfDay > 12) 
        {
            hour = hourOfDay - 12;
            amORpm = "PM";
        } 
        else 
        {
            hour = hourOfDay;
            amORpm = "AM";
        }

        textBox.setText(hour + " : " + minute + " " + amORpm);

        Toast.makeText(getBaseContext(), "Arrival time changed to: " + hour +":" + minute , Toast.LENGTH_LONG).show();

    }
};

【问题讨论】:

  • 你确定Also if I set the time to 12:30 the out put is 12:3 吗?
  • 是的,它删除了“0”

标签: android output timepicker


【解决方案1】:

尝试使用

minute = String.valueOf(hour_minute);

因为整数省略了开始的 0,并确保分钟是字符串变量

【讨论】:

  • 我是这么想的,但他发了Also if I set the time to 12:30 the output is 12:3
【解决方案2】:

您需要使用以下格式正确显示一位数字时间:

String.format("%02d:%02d", hour, min);

其中小时和分钟分别代表小时和分钟的值。

【讨论】:

    【解决方案3】:

    由于返回值为整数,所以不包括前导零。如果您需要使用整数,例如设置闹钟,那么您可以使用它。要向用户显示,您可以从日历中获取时间作为字符串并将其存储在一个字符串中,该字符串将具有前导零,如 02:05 。像这样将返回值为零但作为字符串:

    String.format("%02d", minute);
    

    【讨论】:

      【解决方案4】:

      使用下面的代码非常适合我。

      @Override
          protected Dialog onCreateDialog(int id) {
              switch (id) {
              case TIME_DIALOG_ID:
                  // set time picker as current time
                  return new TimePickerDialog(this, timePickerListener, hour,
                          minute, false);
              }
              return null;
          }
      
          private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() {
              @Override
              public void onTimeSet(TimePicker view, int hourOfDay, int minutes) {
                  hour = hourOfDay;
                  minute = minutes;
                  updateTime(hour, minute);
              }
          };
      
          private void updateTime(int hours, int mins) {
      
              String timeSet = "";
              if (hours > 12) {
                  hours -= 12;
                  timeSet = "PM";
              } else if (hours == 0) {
                  hours += 12;
                  timeSet = "AM";
              } else if (hours == 12)
                  timeSet = "PM";
              else
                  timeSet = "AM";
      
              String minutes = "";
              if (mins < 10)
                  minutes = "0" + mins;
              else
                  minutes = String.valueOf(mins);
      
              String aTime = new StringBuilder().append(hours).append(':').append(minutes)
                      .append(" ").append(timeSet).toString();
                  textBox.setText(aTime);
          }
      

      【讨论】:

      • 只需根据您的要求更改变量名称。如果您有任何疑问,请发表评论。
      • 我对您投了反对票,因为您的 String timeSet = ""; 代码过于复杂。如果以String timeSet = "AM";开头,可能可以简化。
      • 这是不同的选择,原因很简单,您不能对所有用户投反对票,因为每个人的回答都只是有些正确。
      【解决方案5】:

      使用这个类

      public class TimeListener implements OnClickListener, OnTimeSetListener {
      
          private int hour;
          private int minute;
          private Activity activity;
          private View touchedView;
      
          public TimeListener(Activity activity) {
              this.activity = activity;
              final Calendar c = Calendar.getInstance();
              this.hour = c.get(Calendar.HOUR_OF_DAY);
              this.minute = c.get(Calendar.MINUTE);
          }
      
          public int getHour() {
              return hour;
          }
      
          public int getMinute() {
              return minute;
          }
      
      
          @Override
          public void onClick(View v) {
              touchedView = v;
      
              new TimePickerDialog(activity,
                      this, this.getHour(), this.getMinute(), false).show();
          }
      
          private void updateDisplay() {
              ((TextView) touchedView).setText(
                  new StringBuilder()
                          .append(pad(hour)).append(":")
                          .append(pad(minute)));
          }
      
          private static String pad(int c) {
              if (c >= 10)
                  return String.valueOf(c);
              else
                  return "0" + String.valueOf(c);
          }
      
          public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
              this.hour = hourOfDay;
              this.minute = minute;
              updateDisplay();
          }
      }
      

      并在您的活动类中使用以下代码...

      private TimeListener timeListener = new TimeListener(this);
      view.setOnClicklistner(timeListener);
      

      谢谢...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-17
        • 1970-01-01
        • 2021-12-06
        • 2012-08-28
        • 2019-10-08
        • 1970-01-01
        相关资源
        最近更新 更多