3

SimpleDateFormatを使用して時間間隔をフォーマットしようとしています。

import java.text.*;
import java.util.*;

public class DateFormatTest {
  public static void main(String[] args) {
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
    long interval = 1000;
    System.out.println("Interval in millis: " + interval);
    System.out.println("Expected result: 00:00:01");
    System.out.println("Result using Date and SimpleDateFormat: " +
      sdf.format(new Date(interval)));
  }
}

次の結果が得られます。

Interval in millis: 1000
Expected result: 00:00:01
Result using Date and SimpleDateFormat: 01:00:01

私はGMT+1タイムゾーンにいます。しかし、それは結果に反映されるべきではありません。

もちろん、System.out.printfで解決できますが、私が探しているのはその理由です。

4

3 に答える 3

4

私はGMT+1タイムゾーンにいます。しかし、結果に反映されるべきではありません。

どうしてそう思いますか?new Date(0)1970年1月1日の午前00:00GMTです。したがって、デフォルトのタイムゾーンがGMT+1の場合は午前01:00です。

于 2013-01-05T12:05:20.097 に答える
3

私はGMT+1タイムゾーンにいます。しかし、それは結果に反映されるべきではありません。

次に、でタイムゾーンを設定する必要がありSimpleDateFormatます。正確SimpleDateFormatに正しいことを行っています-それは、それが働いているタイムゾーンの瞬間( UTC 1970の真夜中の直後)をフォーマットしています。

タイムゾーンを変更するには、次を使用します。

sdf.setTimeZone(TimeZone.getTimeZone("etc/UTC"));

ただし、実際に使用する必要があるかどうかは明確ではありませんSimpleDateFormat。日付/時刻をフォーマットしようとしているのではなく、変数名を指定して間隔をフォーマットしようとしているのです。

型システムが充実していて、本当に欲しいものを表現できるJodaTime使うことをお勧めします

また、本当に使用したい場合は、フォーマット文字列の代わりにSimpleDateFormatを使用することをお勧めします。(は12時間の値、1〜12です。12:00:01ではなく00:00:01が必要です。)パターンにam / pm指定子がない場合は、ほとんど適切ではありませんHHhhhhhh

于 2013-01-05T12:06:28.330 に答える
1
于 2020-02-09T19:43:32.227 に答える