7

次のコードを考えてみましょう。

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
long start = sdf.parse("10:30:00 30/09/2009").getTime();
long end = sdf.parse("10:30:00 30/10/2009").getTime();

Calendar c = Calendar.getInstance(Locale.US);
c.setTimeInMillis(start);
System.out.println("Start = " + c.getTime());
c.setTimeInMillis(end);
System.out.println("  End = " + c.getTime());

このコードスニペットを実行すると、次の出力が得られます。

Start = Wed Sep 30 10:30:00 CEST 2009
  End = Fri Oct 30 10:30:00 CET 2009

なぜ異なるタイムゾーンを取得するのですか?

最初の日付を8月に設定し、2番目の日付を9月に設定すると、どちらの場合も出力に同じタイムゾーンが表示されることに注意してください。

long start = sdf.parse("10:30:00 30/08/2009").getTime();
long end = sdf.parse("10:30:00 30/09/2009").getTime();

表示されます:

Start = Sun Aug 30 10:30:00 CEST 2009
  End = Wed Sep 30 10:30:00 CEST 2009

Java1.6.0_14を使用しています

4

3 に答える 3

9

CESTは中央ヨーロッパ夏時間です。CETサマータイム実施時と同じです。

于 2010-01-19T09:21:14.517 に答える
7

デフォルトのタイムゾーンを設定できます

    import java.util.TimeZone;
...        
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));  // or "Etc/GMT-1"

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
    long start = sdf.parse("10:30:00 30/09/2009").getTime();
    long end = sdf.parse("10:30:00 30/10/2009").getTime();

    Calendar c = Calendar.getInstance(Locale.US);
    c.setTimeInMillis(start);
    System.out.println("Start = " + c.getTime());
    c.setTimeInMillis(end);
    System.out.println("  End = " + c.getTime());

使用TimeZone.getAvailableIDs()可能なすべての ID を表示するために使用します。

EDIT : 新しい SimpleTimeZone を使用することもできます

    TimeZone.setDefault(new SimpleTimeZone(60 * 60 * 1000, "CET"));
于 2010-01-19T16:01:48.670 に答える
0

はい、夏時間に関係しています。DST を認識するタイム ゾーンを使用すると、自動的に使用されます。これが必要ない場合は、たとえば GMT を使用できます。

于 2010-01-19T09:24:01.253 に答える