他の回答は正しく、2013 年に質問されたときは適切な回答でした。現在、 Date
norSimpleDateFormat
を使用する必要がなくなったため、代わりにいくつかの最新のコード スニペットをお見せしたいと思います。(この場合) 2 305 293 ミリ秒をフォーマットする正しい方法は、それらが表すものによって異なります。3 つの異なる状況に対応する 3 つのオプションを提示します。
エポックからのミリ秒数のフォーマット
ある時点を解釈するタイムゾーンを決定する必要があります。例えば:
long millis = 2_305_293L;
DateTimeFormatter formatter = DateTimeFormatter
.ofLocalizedDateTime(FormatStyle.LONG)
.withLocale(Locale.ENGLISH);
ZonedDateTime dateTime = Instant.ofEpochMilli(millis)
.atZone(ZoneId.of("America/Coral_Harbour"));
String formattedTime = dateTime.format(formatter);
System.out.println(formattedTime);
1969 年 12 月 31 日午後 7 時 38 分 25 秒(EST)
エポックでコーラル ハーバーは UTC オフセット -05:00 にあったため、1969 年末近くの時刻が得られます。UTC で時間が必要な場合 (エポックは UTC で定義されているため、つまり、必要な場合00:38:25
)、それは少し異なります:
DateTimeFormatter formatter = DateTimeFormatter
.ofLocalizedDateTime(FormatStyle.MEDIUM)
.withLocale(Locale.ENGLISH);
OffsetDateTime dateTime = Instant.ofEpochMilli(millis)
.atOffset(ZoneOffset.UTC);
1970 年 1 月 1 日午前 12 時 38 分 25 秒
タイム ゾーンに加えて、ロケールによって言語を変更したり、フォーマット スタイル (フル、ロング、ミディアム、ショート) によってフォーマットの長さを変更したりできます。日付なしで時刻が必要な場合は、ofLocalizedTime
代わりに を使用しofLocalizedDateTime
ます。
ミリ秒単位の書式設定
ミリ秒が、どのタイムゾーンでも 0:00 (「真夜中」) 以降であると仮定します。
LocalTime time = LocalTime.MIN.with(ChronoField.MILLI_OF_DAY, millis);
System.out.println(time);
00:38:25.293
この形式で十分な場合は、明示的なフォーマッターは必要ありません。そうでない場合は、 を使用できますDateTimeFormatter
。
期間、時間のフォーマット
時間は時間とは全く別のものであり、Duration
オブジェクトとして扱われます。それをフォーマットするための直接的なサポートはありませんが、Java 9 以降はそれほど難しくありません (やり方がわかれば):
Duration amountOfTime = Duration.ofMillis(millis);
String formattedTime = String.format("%02d:%02d:%02d",amountOfTime.toHours(),
amountOfTime.toMinutesPart(), amountOfTime.toSecondsPart());
System.out.println(formattedTime);
00:38:25
リンク
Oracle チュートリアル: Java.time の使用方法を説明する Date Time。