将2个毫秒的字符串转换为日期,并计算时差 java

问题描述 投票:-1回答:1

我有两个字符串,分别是分、秒和毫秒。

String startTime = "02:58.917"
String finishTime = "04:03.332"

我需要计算时间差。据我了解(但我不确定)最简单的方法是将它们转换成Date类型,但我不知道如何正确地做,尤其是毫秒。P.S. If anybode know how I can calculate time difference without converting to Date, it also fits.Help pls!

UPD: 我需要得到相同格式的结果,像这样 "01:04:415"

java date type-conversion milliseconds datetime-conversion
1个回答
1
投票

你可以获得 java.time.Duration 通过计算开始时间和结束时间之间的差值,可以得到分、秒和毫秒部分。然后,您可以从这个对象中得到分、秒和毫秒的部分。Duration 对象来获取所需的输出。

import java.text.ParseException;
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;

public class Main {
    public static void main(String[] args) throws ParseException {
        String startTime = "02:58.917";
        String finishTime = "04:03.332";
        // Create a format by defaulting the hour to any value e.g. 0
        DateTimeFormatter format = new DateTimeFormatterBuilder().append(DateTimeFormatter.ofPattern("mm:ss.SSS"))
                .parseDefaulting(ChronoField.HOUR_OF_DAY, 0).toFormatter();
        LocalTime firstTime = LocalTime.parse(startTime, format);
        LocalTime secondTime = LocalTime.parse(finishTime, format);
        Duration diff = Duration.between(firstTime, secondTime);
        String msms = String.format("%02d:%02d:%03d", diff.toMinutesPart(), diff.toSecondsPart(), diff.toMillisPart());
        System.out.println("The difference is " + msms);
    }
}

输出。

The difference is 01:04:415

1
投票

下面是一个例子,说明如何使用 java.time:

// create dtf for pattern where mm is minutes, ss is seconds, SSS is millis
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("mm:ss.SSS");

// we need to add a default value for hour so the parsing with LocalTime works
formatter = new DateTimeFormatterBuilder()
        .append(formatter)
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 1)
        .toFormatter();

// parse the values
LocalTime t1 = LocalTime.parse("02:58.917", formatter);
LocalTime t2 = LocalTime.parse("04:03.332", formatter);

// get the millis between t1 and t2
System.out.println(t1.until(t2, ChronoUnit.MILLIS));

// another way
System.out.println(ChronoUnit.MILLIS.between(t1, t2));

// you can get the result in the same format by adding the difference
// to a new LocalTime with all set to zero and using the formatter
LocalTime delta = LocalTime.of(1, 0, 0, 0)
        .plus(t1.until(t2, ChronoUnit.MILLIS), ChronoUnit.MILLIS);
System.out.println(delta.format(formatter));
© www.soinside.com 2019 - 2024. All rights reserved.