在 java.time 中将时间正确转换为毫秒 (Java 8)

2022-09-02 00:44:50

我一直在尝试使用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


答案 1

你应该使用Instant::toEpochMilli


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

指纹

1422554400000
1422554400
0

您的版本不起作用,因为您忘记用额外的零填充以将其填充到3个位置。instant.get(ChronoField.MILLI_OF_SECOND)


答案 2

日期和时间类教程...

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