Java Android TimePickerDialog-只有一半的时间(字面意思)可用
MacOS-X 日食与ADT 安卓 问题:当我选择时间时,比如说06:00,它将时间设置为18:00,当我选择18:00时,它将时间设置为06:00。我似乎不明白为什么 逻辑 获取当前日期实例 OnClickListener设置为ButtonImage OnClick使用两个参数调用showTimeDialog,一个TextView,即当前日期实例 时间选择器对话框在设定的09:00显示 TimeSet设置日历的时间activeTime并更新TextView 其他新信息 好吧,奇怪的事情发生了,现在我的代码似乎工作了,但我上次检查它是在24:00之前,它的行为如所述。它现在可以工作了,在英国时间是00:20。我不知道这是否有什么关系,但我会更新这篇文章,如果有任何变化 其他新信息2 我的代码似乎在00:00-12:00之间工作,但在12:00-24:00之间不工作。我被难住了 这是我的密码:Java Android TimePickerDialog-只有一半的时间(字面意思)可用,java,android,time,datepicker,timepicker,Java,Android,Time,Datepicker,Timepicker,MacOS-X 日食与ADT 安卓 问题:当我选择时间时,比如说06:00,它将时间设置为18:00,当我选择18:00时,它将时间设置为06:00。我似乎不明白为什么 逻辑 获取当前日期实例 OnClickListener设置为ButtonImage OnClick使用两个参数调用showTimeDialog,一个TextView,即当前日期实例 时间选择器对话框在设定的09:00显示 TimeSet设置日历的时间activeTime并更新TextView 其他新信息 好吧,奇怪的事情发
/////// SETUP TIME
// capture our View elements for the start time function
startTimeDisplay = (TextView) findViewById(R.id.editText2);
endTimeDisplay = (TextView) findViewById(R.id.editText3);
startPickTime = (ImageButton) findViewById(R.id.imageButtonStartTime);
endPickTime = (ImageButton) findViewById(R.id.imageButtonEndTime);
// Use the current time as the default values for the time picker
startTime = Calendar.getInstance();
endTime = Calendar.getInstance();
startTime.get(Calendar.DATE);
endTime.get(Calendar.DATE);
// add a click listener to the button
startPickTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showTimeDialog(startTimeDisplay, startTime);
}
});
/* add a click listener to the button */
endPickTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showTimeDialog(endTimeDisplay, endTime);
}
});
}
@Override
protected Dialog onCreateDialog(int id) {
getTime(activeTime);
int hr = activeTime.get(Calendar.HOUR_OF_DAY);
int mn = activeTime.get(Calendar.MINUTE);
Log.d(TAG, "first hr..." +hr);
Log.d(TAG, "first mn..." +mn);
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, dateSetListener, activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
case TIME_DIALOG_ID:
return new TimePickerDialog(this, timeSetListener, THE_HOUR, THE_MINUTE, true);
}
return null;
}
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
getTime(activeTime);
int hr = activeTime.get(Calendar.HOUR_OF_DAY);
int mn = activeTime.get(Calendar.MINUTE);
Log.d(TAG, "second hr..." +hr);
Log.d(TAG, "second mn..." +mn);
switch (id) {
case DATE_DIALOG_ID:
((DatePickerDialog) dialog).updateDate(activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
break;
case TIME_DIALOG_ID:
((TimePickerDialog) dialog).updateTime(THE_HOUR, THE_MINUTE);
break;
}
}
public void showTimeDialog(TextView timeDisplay, Calendar date) {
activeTimeDisplay = timeDisplay;
activeTime = date;
showDialog(TIME_DIALOG_ID);
}
private OnTimeSetListener timeSetListener = new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hour, int minute) {
activeTime.set(Calendar.HOUR, hour);
activeTime.set(Calendar.MINUTE, minute);
updateTimeDisplay(activeTimeDisplay, activeTime);
unregisterTimeDisplay();
}
};
private void updateTimeDisplay(TextView timeDisplay, Calendar date) {
//convert Calendar to Unix Time
long activeTimeUnixTime = (long) (date.getTimeInMillis());
//convert Unix Time to Date
java.util.Date startTimeDate = new java.util.Date(activeTimeUnixTime);
//convert Date to SimpleDateFormat and convert to String
SimpleDateFormat formatter2;
formatter2 = new SimpleDateFormat("kk:mm", Locale.UK);
String stringTime = formatter2.format(startTimeDate);
timeDisplay.setText(stringTime);
}
private void unregisterTimeDisplay() {
activeTimeDisplay = null;
activeTime = null;
}
解决方案:
我的onTimeSetListener onTimeSet方法使用的是HOUR而不是HOUR
好吧,我在这个问题上纠缠了很久,但最终还是解决了。但是因为我对Android和Calendar还很陌生,所以这种差异暗指我
Calendar.HOUR是5:00,因为这是下午的第5个小时。Calendar.HOUR\u OF_DAY返回17:00。下面是正确的代码:
private OnTimeSetListener timeSetListener = new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
activeTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
activeTime.set(Calendar.MINUTE, minute);
updateTimeDisplay(activeTimeDisplay, activeTime);
unregisterTimeDisplay();
}
};