1

現在の時刻が表示されるヘッダーを持つプログラムを書いています。ユーザーが日付/時刻の設定を変更できるようにしたい。しかし、ユーザーが変更した後、カレンダーを最新の状態に保つことができません。ユーザーが入力した値が常に表示されます。例えば:

Calendar cal = Calendar.getInstance();
System.out.println(cal.getTime());
cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
try {
    Thread.sleep(2000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
System.out.println(cal.getTime());

最初の出力が

Mon Feb 18 11:33:07 CET 2013

ここで欲しいのは、毎秒 2 秒の出力後に取得することです

Mon Sep 18 11:33:09 CET 2013 // Month = Sep and Seconds = 09

私が代わりに得るのは

Mon Sep 18 11:33:07 CET 2013 // Month = Sep, seconds don't change, still 07!!

cal = Calendar.getInstance();2 番目の出力の前に追加すると、

Mon Feb 18 11:33:09 CET 2013 // Seconds = 09, month doesn't change, still Feb!!

私が見つけられない簡単で明白な実装があるに違いないと思います。

更新: 作業中の組み込みシステムで DateFormat を使用できません。

4

4 に答える 4

3

オブジェクトの作成中または明示的に時刻を設定しているときに、Calendar の時刻が設定されるため、Calendar は更新されません。あなたの場合、この行の後に設定します。

Calendar cal = Calendar.getInstance();

本当にやりたい場合は、経過時間を見つけて、以下のようにカレンダー時間をインクリメントする必要があります。

long startTime = System.currentTimeMillis(); // Process start time

try {
    Thread.sleep(2000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

// Calculating elapse time
long elapsedTime = System.currentTimeMillis() - startTime;
// Incrementing the calendar time based on elapsed time
cal.setTimeInMillis(cal.getTime().getTime() + elapsedTime);
于 2013-02-18T11:08:46.430 に答える
2

Calendar単なるDateスナップショットです。作成した後、自動的に更新されることはありません。

どちらを選択しても、表示を更新するたびに新しいものを作成する必要があります。そして、その新しいスナップショットを調整します。

Java が月を変更したときにコンピューターの時刻を変更するようにしたい場合は、次の記事を参照してください: How can I set the System Time in Java?

于 2013-02-18T11:00:10.430 に答える
1

月を追加してから正しい秒数で時間を再計算しようとする代わりに、月をオフセットとして保存する必要があります。更新された時間を取得するたびに、リアルタイムを計算し、オフセット時間を追加します。

オフセット時間を として計算し、longそれをリアルタイムに追加できます。ただし、これはより簡単な例です-

Calendar start = Calendar.getInstance();
System.out.println(start);
//add offset
int monthsOffset = 3;
//get new time
start.add(Calendar.MONTH, monthsOffset);
System.out.println(start);
于 2013-02-18T10:49:08.587 に答える
0

あなたの問題については、Date()カレンダーではなく使用する必要があります。

理由: Calander は calander のように機能します。インスタンスは、変更されない calander の特定のインスタンス (物理的なものなど) を指します。

ただし、以下に示すように、Date() は動的です。

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
       //get current date time with Date()
       Date date = new Date();
       System.out.println(dateFormat.format(date));

更新: 「問題は組み込みシステムに固有のものであるため」というコメントに応えて

この回答を参照してください

于 2013-02-18T10:51:18.323 に答える