6

OleDateTimeGMTタイムゾーンで日付を形式で保存するデータベースがあります。クラスを実装しDate、Java で拡張して、それを従来の日付形式で表現しました。しかし、私のクラスはロケールに依存しています (私は GMT+2 にいます)。したがって、データベースの日付を として変換しますdate - 2 hours。日付を正しく変換するにはどうすればよいですか? クラスをロケールに依存せず、常に GMT タイムゾーンを使用したいと考えています。実際、質問は次のとおりです。

class MyOleDateTime extends Date {

    static {
        Locale.setDefault(WhatGoesHere?)
    }

    // ... some constructors
    // ... some methods
}
4

5 に答える 5

10

まあ、他の回答で提案されているように Calendar オブジェクトを使用することをお勧めします。ただし、本当にグローバル タイムゾーンを設定したい場合TimeZone.setDefault(TimeZone.getTimeZone("UTC"));は、アプリケーション コードの早い段階で を使用できます。user.timezoneJava システム プロパティもあります。

また、(知っておくと楽しい)、実際に GMT/UTC 時間 (夏時間の変更なし) で生きている国はリベリアだけのようです。

実際、Dateオブジェクト自体は常にロケールおよびタイムゾーンに依存しません。そのgetTime()メソッドは常に、1970 年 1 月 1 日 00:00:00 (うるう秒はカウントしない) から経過したミリ秒数をUTCで返します。しかし、ミリ秒以外のものを取得したい場合Calendar、タイムゾーンに依存する を使用する必要があります。しかし、それは正しい方法です。廃止されたメソッドをクラスで使用していませんか?Date

于 2010-04-23T10:02:12.627 に答える
7

Michael Borgwardt がすでに述べたように、JavaDateオブジェクトはタイムゾーンについて何も知りません。これは、1970 年 1 月 1 日 00:00:00 UTC からのミリ秒数の単なるラッパーです。

たとえば、を使用してDateオブジェクトを に変換する場合にのみ、タイムゾーンの処理を開始します。でタイムゾーンを設定して、を表示するタイムゾーンを指定します。StringDateFormatDateFormatDate

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("UTC"));

String text = df.format(date);  // text will contain date represented in UTC
于 2010-04-23T10:19:17.033 に答える
2

Date ロケールに依存せず、常に GMT タイムゾーンを使用します。これは、GMT (より正確には UTC) のミリ秒タイムスタンプの単なるラッパーです。

Dateタイムゾーンに依存するのは、次のような非推奨のメソッドだけgetDay()です。そのため、非推奨になっています。それらはデフォルトのタイムゾーンを使用します。デフォルトのタイムゾーンを UTC に設定しないでください。これは他の場所で問題を引き起こす可能性があり、コードの他の部分がデフォルトのタイムゾーンを別の場所に設定するのを防ぐことはできません。

于 2010-04-23T10:03:45.440 に答える
0

Calendarオブジェクトを使用します。

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
                                    locale);
于 2010-04-23T09:50:21.867 に答える