如何使用LocalDateTime从Java 8中的String创建长时间的毫秒数?

Khi*_*ian 3 datetime java-8 java-time

我有一个输入日期格式yyyy-MM-dd_HH:mm:ss.SSS,并以这种方式将其转换为 long:

SimpleDateFormat simpleDateFormat = 
                   new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss.SSS");
try {
    Date date = simpleDateFormat.parse(lapTime);
    time = date.getTime();
} catch (ParseException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

并且,经过一些操作后,mm:ss.SSS从 long 返回:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss.SSS");
return simpleDateFormat.format(new Date(time));
Run Code Online (Sandbox Code Playgroud)

如何将我的旧样式代码更改为 Java8?我看了LocalDateTimeInstant类,但不知道如何正确使用它们。

Dea*_*ool 5

您可以使用输入的格式化日期创建DateTimeFormatter,然后转换为带区域的Instant以提取纪元时间戳

String date = "2019-12-13_09:23:23.333";
DateTimeFormatter formatter = 
         DateTimeFormatter.ofPattern("yyyy-MM-dd_HH:mm:ss.SSS");

long mills = LocalDateTime.parse(date,formatter)
                .atZone(ZoneId.systemDefault())
                .toInstant()
                .toEpochMilli();

System.out.println(mills);
Run Code Online (Sandbox Code Playgroud)