1

タイムスタンプを取得しようとしています。

これは機能します。

final Calendar cal = new GregorianCalendar(tz);
final Timestamp ts = new Timestamp(cal.getTimeInMillis());

しかし、毎回変数を再インスタンス化したくないので、タイムスタンプを取得する必要があります。どうやってやるの?

やってみました..

//instantiate the variables.

    private final Calendar cal = new GregorianCalendar(tz);
    private final Timestamp ts = new Timestamp(cal.getTimeInMillis());

Inside a method()

    // trying to ask calendar to recalculate the time -- not working.
    cal.setTimeZone(tz); // I tried cal.clear() but it is giving me time during 1970 which I don't want.
    ts.setTime(cal.getTimeInMillis());

これはうまくいかないようです。提案していただけますか?

4

2 に答える 2

3

多分私は何かが欠けているかもしれませんが、これは:

final Calendar cal = new GregorianCalendar(tz);
final Timestamp ts = new Timestamp(cal.getTimeInMillis());

はるかに軽量と同等です:

final Timestamp ts = new Timestamp(System.currentTimeMillis());

これは、 new with specific time zone がnowGregorianCalendarを指しているためです。また、呼び出しはタイムゾーンを「無視」するため、基本的にエポックからの現在の時刻をミリ秒単位で要求します。これはで行うことができます。getTimeInMillis()System.currentTimeMillis()

Timestampクラスは次のとおりです。

周りの薄いラッパーjava.util.Date

AndDateは、タイム ゾーンに関係なく、特定の時点を表します。TimestampどちらもDate任意のタイムゾーンでは作成できません。これらのクラスは、そのような情報を保持しません。つまり、GMT+1 の 14:00 と GMT+0 の 13:00 を表すカレンダー オブジェクトは、まったく同じDateandTimestampオブジェクトになります。これらの日付は同じだからです。

于 2012-08-28T16:43:08.607 に答える
2

System.currentTimeMillis()カレンダーを作成しないようにしてください。

于 2012-08-28T16:43:11.590 に答える