0
  1. 私のサーバーは GMT+7 を使用しているため、別の GMT タイムゾーンを持つ別のサーバーに移動すると、データベースに保存されているすべての日付が正しくなくなりますか?
  2. はい Q1 は正しいです。日付を GMT+0 タイムゾーンで保存し、各メンバーが選択したカスタム GMT タイムゾーンで表示するのはどうですか
  3. JavaでGMT + 0で日付を取得する方法
4

5 に答える 5

11

1) javadocs から引用すると、Java ミリ秒のタイムスタンプは次のとおりです。

現在時刻と 1970 年 1 月 1 日 UTC 午前 0 時との差 (ミリ秒単位)。

したがって、タイムスタンプは UTC/GMT であるため、データベースに保存すると、サーバーのタイム ゾーンに関係なく、この日付は正確になります。

2) タイムゾーンに応じて表示用のタイムスタンプをフォーマットするのが正しいアプローチです。

3) 新しい java.util.Date インスタンスを作成して getTime() を呼び出すと、Java で GMT+0 のタイムスタンプが取得されます。

于 2009-05-11T10:31:06.517 に答える
2

マークのポイントに追加するには、java.util.Date を取得したら、それを (ユーザーが選択した) 任意のタイムゾーンに「変換」できます。Groovy でのコード サンプルを次に示します (わずかな変更で Java で動作します)。

// This is a test to prove that in Java, you can create ONE java.util.Date
// and easily re-display it in different TimeZones
fmtStr = "MM/dd/yyyy hh:mm aa zzz"
myDate = new java.util.Date()
sdf = new java.text.SimpleDateFormat(fmtStr)

// Default TimeZone
println "Date formatted with default TimeZone: " + sdf.format(myDate)

// GMT
sdf.setTimeZone(TimeZone.getTimeZone("GMT"))
println "Date formatted with GMT TimeZone: " + sdf.format(myDate)

// America/New_York
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"))
println "Date formatted with America/New_York TimeZone: " + sdf.format(myDate)

// PST
sdf.setTimeZone(TimeZone.getTimeZone("PST"))
println "Date formatted with PST TimeZone: " + sdf.format(myDate)
于 2009-09-29T14:04:46.957 に答える
1

デフォルトでは、Java で日付を現在のタイムゾーンで取得する場合、TimeZoneクラスを使用して、システム時刻が実行されているタイムゾーンを取得できます。ほとんどのデータベースは、日付をタイムゾーンと共に保存できることをサポートしています。これはおそらく正しい方法です。これを行うには、正確にどのような形式であるかは、使用するデータベースに依存する可能性があります。

于 2009-05-11T10:31:00.467 に答える
0

Date を「ホルダー」としてのみ使用し、代わりに Calendar インスタンスを使用することをお勧めします。GMT タイム ゾーンのカレンダーを取得するには、次のようにします。

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+00"))

カレンダーは、時間と日付を扱うときに非常に役立ちます。たとえば、これに 1 時間を追加するのは簡単です。

cal.add(Calendar.HOUR, 1);

最後に、日付が必要な場合は、これを使用します。

Date date = cal.getTime();
于 2010-07-28T17:52:06.030 に答える
0

Q3 では、ZonedDateTime クラスの使用を検討してください。

于 2016-09-07T08:59:23.257 に答える