Java Android TimePicker没有给出期望的结果

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

您好,我正在计算用户的睡眠时间为7.5小时。该应用程序应建议用户在准确的时间睡觉。例如,她选择早上7:00作为起床时间,应用程序会建议她在上午11:30之前应该上床睡觉。到目前为止,我尝试的是:

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:再看看他的密码。他没有用日历做任何事。