在 java.time (Java 8) 中正确地将时间转换为毫秒
Converting a time to milliseconds correctly in 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
,但找不到有效转换为毫秒的方法。我并不是说这是最好的方法,如果您知道更好的方法,我将不胜感激。
你应该使用 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 个位置。
来自 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
好的,我想我终于找到了一种简单的方法来完成我想做的事情
LocalDateTime localDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("dd/MMM/uuuu:H:m:s"));
System.out.println(localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli());
打印 1390903200000
我一直在尝试使用 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
,但找不到有效转换为毫秒的方法。我并不是说这是最好的方法,如果您知道更好的方法,我将不胜感激。
你应该使用 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 个位置。
来自 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
好的,我想我终于找到了一种简单的方法来完成我想做的事情
LocalDateTime localDateTime = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("dd/MMM/uuuu:H:m:s"));
System.out.println(localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli());
打印 1390903200000