1

Mac OS-X

ADT を使用した ECLIPSE

アンドロイド

...............

問題: 時刻を 06:00 と指定すると時刻が 18:00 に設定され、時刻 18:00 と指定すると時刻が 06:00 に設定されます。理由が分からないようです。

...............

論理

現在の日付インスタンスを取得します。

OnClickListener は ButtonImage に設定されます。

OnClick は、2 つの引数 (TextView、現在の日付インスタンス) を指定して showTimeDialog を呼び出します。

TimePicker ダイアログは、09:00 の設定時刻に表示されます。

TimeSet は Calendar activeTime の時刻を設定し、TextView を更新します

…………

追加の新しい情報

奇妙なことが起こったので、コードが機能するようになりましたが、最後に確認したのは 24:00 より前で、説明どおりに動作していました。現在は機能しており、ここ英国では時刻は 00:20 です。これと関係があるかどうかはわかりませんが、何か変更があればこの記事を更新します。

追加の新しい情報 2

私のコードは 00:00 から 12:00 の間は動作するようですが、12:00 から 24:00 までは動作しません。私は困惑しています..

…………

これが私のコードです:

    /////// 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;
}
4

1 に答える 1

0

解決:

私の onTimeSetListener onTimeSet() メソッドは、HOUR_OF_DAY ではなく HOUR を使用していました。

さて、私は何年もこれに固執していましたが、ついにそれを理解しました。しかし、私はAndroidとCalendarにまったく慣れていないので、違いが私をほのめかしました。

Calendar.HOUR は、午後の 5 時間目であるため、17:00 の 5 です。Calendar.HOUR_OF_DAY は、17:00 に対して 17 を返します。したがって、ここに正しいコードがあります:

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();
    }
};
于 2013-01-17T01:26:32.990 に答える