0

こんにちは、ユーザーの睡眠時間を 7.5 で計算しようとしています。アプリは、ユーザーが正確な時間に就寝する必要があることを示唆する必要があります。たとえば、彼女が午前 7 時を起床時間として選択すると、アプリは午前 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 時を入力すると、結果は午後 2 時 30 分になります。しかし、それは午後12時30分のはずです。どんな助けでも感謝します。

4

1 に答える 1

1

いいえ、正しいです。午前 7:00 + 7.5 時間 = 14:30 = 午前 2:30 を入力した場合。プログラムは正しく動作しています。

編集:あなたはほとんどやった:

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 時が返されます。

編集: コードを修正しました。

于 2012-10-15T18:41:06.953 に答える