0

私は英国でコードを開発しています。英国で正常に機能する日付フィールドをフォーマットしています。米国のサーバーにコードをデプロイすると、日付の年が 1 年ずれます。これがコードです

public static void main(String args[]) {
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    String dateStr = sdf.format(1293840000000L);
    System.out.println(dateStr);
} 

英国では、Windows マシンでローカルにこのコードが正しく出力されます。

2011-01-01T00:00:00Z

Linuxボックス上の米国のサーバーでは、同じコードが出力されます

2010-12-31T18:00:00Z

それはある種のタイムゾーンの問題である必要がありますか?

4

4 に答える 4

1

DateFormatのJavadoc ページには、

日付は、Date オブジェクトとして、または1970 年 1 月 1 日 00:00:00 GMT からのミリ秒として表されます。

強調鉱山。これは、日付をミリ秒 (a long) で指定する場合、タイム ゾーンの計算はユーザーが行う必要があることを意味します。

于 2013-06-10T16:33:05.570 に答える
1

タイムゾーンの違いのようです。米国は英国より数時間遅れています (正確な違いは、具体的にはどこにいるかによって異なります)。

この場合、6 時間の違いです。これは CST から GMT への移行だと思います。そのため、ユーザーのロケール セットが異なる可能性があります。これは、文字列が正しいことを意味します。同じ文字列が必要な場合は、ロケールを変更するか、GMT オフセットを出力していることを確認する必要があります。

例えば、DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");

于 2013-06-10T16:33:08.743 に答える