Java Android TimePicker没有给出期望的结果
您好,我正在计算用户的睡眠时间为7.5小时。该应用程序应建议用户在准确的时间睡觉。例如,她选择早上7:00作为起床时间,应用程序会建议她在上午11:30之前应该上床睡觉。到目前为止,我尝试的是:Java Android TimePicker没有给出期望的结果,java,android,timepicker,Java,Android,Timepicker,您好,我正在计算用户的睡眠时间为7.5小时。该应用程序应建议用户在准确的时间睡觉。例如,她选择早上7:00作为起床时间,应用程序会建议她在上午11:30之前应该上床睡觉。到目前为止,我尝试的是: public class TimepickerActivity extends Activity implements TimePickerDialog.OnTimeSetListener { Button btn1, btn2; TimePicker picker; TextView tv; pr
public class TimepickerActivity extends Activity implements TimePickerDialog.OnTimeSetListener {
Button btn1, btn2;
TimePicker picker;
TextView tv;
private int hour;
private int minute;
static final int TIME_DIALOG_ID = 999;
@Override
public void onCreate( Bundle savedInstanceState ) {
super.onCreate(savedInstanceState);
setContentView( R.layout.activity_timepicker );
btn1 = (Button) findViewById (R.id.btnShow);
btn2 = (Button) findViewById (R.id.btnSleepingTime);
tv = (TextView) findViewById (R.id.textView1);
picker = (TimePicker) findViewById (R.id.timePicker1);
setCurrentTimeOnView();
addListenerOnButton();
}
// display current time
public void setCurrentTimeOnView() {
final Calendar c = Calendar.getInstance();
hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE);
// set current time into textview
tv.setText( new StringBuilder().append(pad(hour))
.append(":").append(pad(minute)));
// set current time into timepicker
picker.setCurrentHour(hour);
picker.setCurrentMinute(minute);
}
public void addListenerOnButton() {
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
showDialog(TIME_DIALOG_ID);
}
});
}
@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() {
public void onTimeSet(TimePicker view, int selectedHour,
int selectedMinute) {
hour = selectedHour;
minute = selectedMinute;
Calendar c = Calendar.getInstance();
c.add(Calendar.HOUR, - selectedHour);
c.add(Calendar.MINUTE, - selectedMinute);
// set current time into timepicker
picker.setCurrentHour(hour + 7);
picker.setCurrentMinute(minute + 30);
// set current time into textview
//tv.setText(new StringBuilder().append(pad(hour))
// .append(":").append(pad(minute)));
tv.setText( picker.getCurrentHour().toString() + ":" + picker.getCurrentMinute().toString() );
}
};
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) {
// TODO Auto-generated method stub
}
}
当我输入早上7:00作为我的起床时间时,结果是下午2:30。但应该是下午12:30。非常感谢您的帮助。不,这是正确的。如果输入7:00am+7.5小时=14:30=2:30am。程序运行正常 编辑:您几乎做到了:
public class TimepickerActivity extends Activity implements TimePickerDialog.OnTimeSetListener {
private static final int SUB_HOUR = -7;
private static final int SUB_MINUTE = -30;
[...]
public void onTimeSet(TimePicker view, int selectedHour,
int selectedMinute) {
// Gets current time
Calendar c = Calendar.getInstance();
// Assign hour set in the picker
c.set(Calendar.HOUR, selectedHour)
c.set(Calendar.MINUTE, selectedMinute);
// Have Calendar calculate the substraction of hours and minutes
c.add(Calendar.HOUR, SUB_HOUR);
c.add(Calendar.MINUTE, SUB_MINUTE);
// Get the hour and the minute calculated
hour = c.get(Calendar.HOUR);
minute = c.get(Calendar.MINUTE);
[...]
当然,这意味着之前的任务:
hour = selectedHour;
minute = selectedMinute;
现在没有用了,你可以移除它
顺便说一句,您没有考虑当天的情况,例如,选择上午1:30将返回下午6:00,但对于前一天
EDIT:我更正了我的代码。在
onTimeSet()中Calendar c
的作用是什么?你从不使用它做任何事情。是的,它是这样工作的,但我的应用程序正在询问用户的起床时间,应用程序应该建议用户在准确的时间睡觉。例如,她选择早上7:00作为起床时间,应用程序会建议她在12:30之前上床睡觉。这在你的问题中并不清楚。我建议你在你的问题中加上这个更详细的例子。另外,12:30+7:30=8:00 am而不是7:00 am,因此正确的结果应该是11:30 PM而不是12:30 am。@dymmeh:那不行。他将设置负小时,就像他现在正在做一样。@m0skit0-我认为日历足够聪明,可以自己做这件事。我相信如果你的答案是否定的,那么“滚动”而不是“添加”会自动更正日期。。Ex-1小时=11小时pm@dymmeh:再看看他的密码。他没有用日历做任何事。