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

时间:2015-02-11 23:49:47

标签: java date java-8 java-time

我一直在尝试使用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,但无法找到有效转换为毫秒的方法。我并不是说这是最好的方法,如果你知道更好的东西,我会非常感谢一些指示。

3 个答案:

答案 0 :(得分:23)

您应该使用Instant::toEpochMilli


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

打印

1422554400000
1422554400
0

您的版本无效,因为您忘记用{0}填充{0}来填充3个地方。

答案 1 :(得分:2)

来自Date and Time Classes教程......

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 :(得分:0)

好吧,我想我终于找到了一种简单的方法来做我想做的事情

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

打印1390903200000