5

次のコードを含む Grails アプリケーションがあります。

Date now = Calendar.getInstance().getTime() //Also tried new Date()
println "now: " + now

これを行うと、 が得られnow: Thu Aug 18 12:47:09 CDT 2011ます。GMT時間をデータベースに保存する必要があるため、日付は現地時間ではなくGMTにする必要があります。simpleDateFormat オブジェクトを使用して GMT で時刻を出力できますが、実際には GMT として保存する必要があります。

質問: GMT を使用して Date オブジェクトを Date オブジェクトに変換するにはどうすればよいですか?

4

8 に答える 8

5

これは、Javaが時間の無駄になる理由を強調しています。以前の投稿はすべて近いですが、GMTで現在の時刻を取得し、CDTで現在の時刻を取得してGMTと呼ぶことに非常に注意する必要があります。

TimeZone reference = TimeZone.getTimeZone("GMT");
Calendar myCal = Calendar.getInstance(reference);

これはGMTの現在の時刻であり、タイムゾーンのコンテキストはGMTです。

ゾーンをそのまま維持するDateオブジェクトに変換するには、次を呼び出す必要があります。

TimeZone.setDefault(reference);

この設定は、現在のJVMと同じ長さです。ここでgetTimeを呼び出すと、目的の結果が得られるはずです。

myCal.getTime();
于 2011-08-18T18:30:42.400 に答える
2

ええと、本当に GMT の時間が必要な場合は、GMT として取得する必要があります (@jpredham は正しいです。称賛に値します!これを反映するように私の投稿を編集しています)。

したがって、次のようにします

//this option uses TimeZone
TimeZone gmtTimeZone = TimeZone.getTimeZone("GMT");
TimeZone.setDefault(gmtTimeZone);
Calendar calendar = Calender.getInstance(gmtTimeZone);

Date myDate = calendar.getTime();
于 2011-08-18T18:04:41.017 に答える
1

これを試して:

println Calendar.getInstance(TimeZone.getTimeZone('GMT')).format('HH:mm:ss')

日付に変換すると、タイムゾーン情報が失われることに注意してください。Java / Groovyが印刷用に日付をフォーマットすると、ローカルタイムゾーン用に自動的にフォーマットされます。心配しないでください。日付にはタイムゾーンが関連付けられていません。次のように表示すると、適切なタイムゾーンを追加し直すことができます。

Date now = Calendar.getInstance(TimeZone.getTimeZone('GMT')).time
def formatter = new java.text.SimpleDateFormat('HH:mm:ss')
formatter.timeZone = TimeZone.getTimeZone('GMT')
println formatter.format(now)
于 2011-08-18T18:10:55.497 に答える
0

System.currentTimeMillis() を使用すると、Calendar または Date を使用するよりもはるかに高速であるだけでなく、常に GMT 時刻が得られます。この時刻を表示したい場合は、SimpleDateFormat を使用して、タイム ゾーンを好きなように設定できます。

于 2011-08-18T18:03:59.697 に答える
0

内部的には、Calendar オブジェクトは時刻を UTC (GMT の現在の名前) で保存します。 getTimeInMillis()UTC 値を返します。これはおそらく保存したいものです。

于 2011-08-18T17:57:33.170 に答える
0
于 2018-02-16T23:28:51.603 に答える
0

GregorianCalendar#setTimeZone(TimeZone timeZone) を試す必要があります。

于 2011-08-18T17:58:43.357 に答える