2012-07-08 108 views
17

我在我的应用程序中使用了TimePicker。每当用户使用TimePicker打开屏幕时,我用当前时间初始化它。当我这样做时,TimePicker显示AM而不是PM。为什么会发生?有什么我必须添加在我的代码?如何设置TimePicker中的AM/PM?

Date initDate = m_NoteManageObject.getDateTimeArray(position); 
Calendar myCal = Calendar.getInstance(); 

myCal.setTime(initDate); 
TimePicker timePicker = (TimePicker)layout.findViewById(R.id.time_picker); 

// Initialise Time Picker 

timePicker.setCurrentHour(myCal.get(Calendar.HOUR)); 
timePicker.setCurrentMinute(myCal.get(Calendar.MINUTE)); 
+0

我有同样的问题,我已经想通了。如果您使用Calendar.HOUR,这意味着您忽略了AM/PM的价值。相反,在设置当前小时的同时,请使用Calendar.HOUR_OF_DAY考虑AM/PM。 – 2013-07-22 16:31:13

回答

38

你将不得不使用Calendar.HOUR_OF_DAY而不是Calendar.HOUR

即,timePicker.setCurrentHour()总是期望24小时格式的参数。不幸的是,这个事实没有在API文档中正确记录。

+0

它解决了我的问题。 – 2013-07-22 16:33:45

+0

我在'textView'中设置时间,并使用相同的textView来选择时间。当我用'timePicker'设置时间时,它对textView可见,但当我再次选择textView **来选择时间时,'timePicker'将'AM/PM'设置为** AM **。请给一个解决方案。 – Apurva 2015-01-19 12:46:38

1

我想你必须重写Timepicker的onTimeSet()方法。检查此链接

TimePickerDialog and AM or PM

愿它可以帮助你..

+0

我不使用TimePickerDialog,我简单地使用TimePicker小部件,我的xml布局。 – AndroidDev 2012-07-08 09:26:15

+0

但是在设置中,它是否是24小时格式?只需检查它并尝试使用12小时格式。 – 2012-07-08 09:28:03

+0

没有它在12小时格式..实际上在时间选择器我想显示上午或下午取决于当前时间 – AndroidDev 2012-07-08 09:29:22

0

试试这个:

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

首先,得到Calendar类的实例,然后使用HOUR_OF_DAY拿到小时。 HOUR_OF_DAY将采用24小时格式,因此只需将其分配给一个变量,然后检查该int是否大于0且小于12。如果此条件为真,则附加AMPM。因为HOUR_OF_DAY是24小时格式,所以PM小时数将显示为13,14,因此要处理此问题,只需将HOUR_OF_DAY减去12即可。下面是代码:

Calendar calendar = Calendar.getInstance(); 
int hour = calendar.get(Calendar.HOUR_OF_DAY); 
if (hour < 12 && hour >= 0) { 
    tv.setText(hour + " AM"); 
} else { 
    hour -= 12; 
    if(hour == 0) { 
     hour = 12; 
    } 
    tv.setText(hour + " PM"); 
} 
0
public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute) { 
    if(hourOfDay>=0 && hourOfDay<12){ 
     time = hourOfDay + " : " + minute + " AM"; 
    } else { 
     if(hourOfDay == 12){ 
      time = hourOfDay + " : " + minute + "PM"; 
     } else{ 
      hourOfDay = hourOfDay -12; 
      time = hourOfDay + " : " + minute + "PM"; 
     } 
    } 

    deliveryTime.setText(time); 
} 
+0

这对android中的timePicker非常有用。试试吧 – 2017-06-28 07:32:34