1

Android アプリケーションのタイムゾーンに問題があります。

次のコードは私の例です:

Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("America/Miami"));
    c2 = Calendar.getInstance(TimeZone.getDefault());
    c2.set(2012, Calendar.MAY, 1, 9, 0, 0);

    tv2.setText(c1.getTime().toString());
    tv3.setText(c2.getTime().toString());

アプリを起動して、見つけた textViews を見ると: ここに画像の説明を入力

なぜそれらは両方ともgmt + 2であり、最初はマイアミのタイムゾーンではないのですか?

4

2 に答える 2

6

私はあなたが経験していることを複製することができます。次の手順を実行すると、マイアミのタイムゾーンで正しい時刻を取得できます。

Calendar c1 = new GregorianCalendar(TimeZone.getTimeZone("GMT-4"));
int hour = c1.get(Calendar.HOUR);         
int minutes = c1.get(Calendar.MINUTE);     
int seconds = c1.get(Calendar.SECOND);

tv2.setText(String.format("%d:%d:%d", hour, minutes, seconds));

出力:4:22:41

「America/New_York」または「GMT-4」のいずれかを使用できます。ただし、Chilledratが言及した最後の1つは、夏時間の問題が発生する可能性があります。

于 2012-04-16T08:26:11.133 に答える
6

なるほど、試行錯誤の末、ようやくわかりました。私が観察した問題は、Calendar の getTime() が常に現在の TimeZone の日付を返すように見えることです。これが機能する方法であると言うデータはまだ見つかりません。

希望する方法でデータを取得するには、SimpleDataFormat を導入する必要があります。これは私がデータを取得するために行ったことです。

Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"), Locale.US);
Calendar c2 = Calendar.getInstance(TimeZone.getDefault());
c2.set(2012, Calendar.MAY, 1, 9, 0, 0);

SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setCalendar(c1);
tv2.setText(sdf.format(c1.getTime()));
tv3.setText(c2.getTime().toString());

ここでは、定義された TimeZone に従って出力を取得します。

推奨されるプラクティスであるはずの Locale も使用したことに注意してください。これがうまくいくかどうか教えてください。

于 2012-04-16T09:14:02.280 に答える