34

Javaでは、GMTで現在の時刻を取得したいと思います。

私はこのようなさまざまなオプションを試しました:

Date date = new Date();
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
date1 = calendar.getTime();

しかし、日付は常に私のローカルタイムゾーンで解釈されます。

何が間違っているのでしょうか。Javaの日付をGMTに変換するにはどうすればよいですか。

4

12 に答える 12

43

日付を取得する際にバックエンドで適切な処理を行った可能性は高いですが、その GMT 時刻を使用せず、マシンの現在のロケールに従ってフォーマットしていないことを示すものは何もありません。

final Date currentTime = new Date();

final SimpleDateFormat sdf =
        new SimpleDateFormat("EEE, MMM d, yyyy hh:mm:ss a z");

// Give it to me in GMT time.
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("GMT time: " + sdf.format(currentTime));

重要なのは、システムが提供するものではなく、独自の DateFormat を使用することです。そうすれば、Locale のタイムゾーンに設定する代わりに、DateFormat のタイムゾーンを希望するものに設定できます。

于 2011-03-08T17:34:59.570 に答える
10

私の経験からすると、Java にバンドルされている Calendar クラスと Date クラスは、望ましくない効果をもたらす可能性があります。Java 8 へのアップグレードを気にしない場合は、使用を検討してください。ZonedDateTime

そのようです:

ZonedDateTime currentDate = ZonedDateTime.now( ZoneOffset.UTC );
于 2014-08-18T12:41:33.267 に答える
9
于 2016-02-05T07:57:50.370 に答える
3

多くの方法を試した後、GMT でミリ単位の時間を取得するには、2 つの別個SimpleDateFormatのオブジェクトを作成する必要があることがわかりました。1 つは GMT でのフォーマット用、もう 1 つは解析用です。

コードは次のとおりです。

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 format.setTimeZone(TimeZone.getTimeZone("UTC"));
 Date date = new Date();
 SimpleDateFormat dateParser = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 Date dateTime= dateParser.parse(format.format(date));
 long gmtMilliSeconds = dateTime.getTime();

これはうまくいきます。:)

于 2015-07-10T11:16:30.150 に答える
3

GMT でミリ秒単位の時間を取得するには、必要なのは

long millis = System.currentTimeMillis();

あなたもできる

long millis = new Date().getTime();

long millis = 
    Calendar.getInstance(TimeZone.getTimeZone("GMT")).getTimeInMillis();

しかし、これらは同じ呼び出しを行う非効率的な方法です。

于 2012-10-23T10:13:56.710 に答える
0

これは非常に単純で簡単です。

Date date = new Date();
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
Calendar cal = Calendar.getInstance(TimeZone.getDefault());
date = cal.getTime();

現在、日付には現在の GMT 時刻が含まれます。

于 2016-02-05T05:52:29.227 に答える