1

私の要件は次のようなものです。

データベースとタイムゾーンでミリ秒単位の時間を節約しています。たとえば、ミリ秒単位の時間は 1223123123232長く、タイムゾーンはAsia/Calcuttaです。Africa/Asmaraタイムゾーンに変換する必要があります。

long l = 1223123123232l;
TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta");
long tzOff = tz.getOffset(l);
java.util.Date d = new Date(l-tzOff);   // WHY THIS??
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
df.setTimeZone(TimeZone.getTimeZone("Africa/Asmara"));// required timezone
String s = df.format(d);
System.out.println(s);

私がこれを参照していることを確認するには:リンク

私の質問は:

  1. タイムゾーンがさまざまな形式(GMTからオフセットされた地理的領域)での時間の表現である場合、実際の時間からオフセット時間を差し引く必要があるのはなぜ(l-tzOff)ですか?
  2. データベースに保存されているタイムゾーンを無視して、日付を変換したいタイムゾーンのみを考慮できないのはなぜですか?

何かのようなもの:

long l = 1223123123232l;
java.util.Date d = new Date(l);
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
df.setTimeZone(TimeZone.getTimeZone("Africa/Asmara"));// required timezone
String s = df.format(d);
System.out.println(s);

私のシステムのタイムゾーンは、タイムゾーンの日付をタイムゾーンAsia/Calcuttaに変換したいのですが、この場合、上記のコードは機能しませんか?なぜそうなのですか?Africa/BujumburaEurope/Vatican

4

2 に答える 2

1

Javaの日付はタイムゾーンを認識していません。したがって、ニューヨークで14H00を保存すると、ミリ秒の値は同じですが、パリの14H00と同じにはなりません。日付を保存するには、一意の参照を使用する必要があります。人々はしばしばGMT+0を選びました。

タイムゾーン全体で現地時間を確認する必要がある場合は、ここで開発したツールを使用できます。

あなたの質問に答えるには:

  1. タイムゾーンは時間の表現ではなく、時間のローカリゼーションです。オフセットを差し引く理由は、すべての時間が同じ参照に従って定義されていることを確認するためです。
  2. 間違った結果と間違った日付が表示されるためです。
于 2013-02-05T10:50:02.560 に答える
1

new Date(long)GMTエポックからのミリ秒数を取ります。あなたの場合lは他の時点(つまり、1970年1月1日、アジア/カルカッタでは00:00:00)からのミリ秒数であるため、最初にGMTに変換する必要があります。これは、関連するタイムゾーンオフセットを差し引くことによって行われます。

于 2013-02-05T10:50:32.673 に答える