web-dev-qa-db-ja.com

Java.timeで時間をミリ秒に正しく変換する(Java 8)

Java 8.に組み込まれているJava.timeパッケージを使用して、 "DateTime"をミリ秒に変換しようとしています。

しかし、私はそれを正しく行うことができませんでした。 「29/Jan/2015:18:00:00」をミリ秒に変換しようとしています。以下は私が試したものです

Instant instant = Instant.parse("2015-01-29T18:00:00.0z");
Long instantMilliSeconds = Long.parseLong(instant.getEpochSecond() + "" + instant.get(ChronoField.MILLI_OF_SECOND));
System.out.println(new Date(instantMilliSeconds)); // prints Sun Jun 14 05:06:00 PDT 1970

LocalDateTimeを使用してみましたが、ミリ秒への変換を効果的に行う方法が見つかりませんでした。これがこれを行うための最良の方法であると言っているわけではありません。何かより良いことを知っている場合は、いくつかのポインタを本当に感謝します。

17
Seagull

_Instant::toEpochMilli_ を使用する必要があります。


_System.out.println(instant.toEpochMilli());
System.out.println(instant.getEpochSecond());
System.out.println(instant.get(ChronoField.MILLI_OF_SECOND));
_

プリント

_1422554400000
1422554400
0
_

instant.get(ChronoField.MILLI_OF_SECOND)に3つの場所を埋めるために追加のゼロを埋め込むのを忘れたため、バージョンは機能しませんでした。

29
Jeffrey

From Date and Time Classes the tutorials ...

DateTimeFormatter formatter
                    = DateTimeFormatter.ofPattern("dd/MMM/yyyy:HH:mm:ss");
LocalDateTime date = LocalDateTime.parse("29/Jan/2015:18:00:00", formatter);
System.out.printf("%s%n", date);

プリント2015-01-29T18:00

ZoneId id = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.of(date, id);
System.out.println(zdt.toInstant().toEpochMilli());

プリント1422514800000

2
MadProgrammer

さて、やっと私がやろうとしていることを行う簡単な方法を見つけたと思います

LocalDateTime localDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("dd/MMM/uuuu:H:m:s"));
System.out.println(localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli());

プリント1390903200000

1
Seagull