如何在 Java 中将字符串时间转换为长毫秒

Kro*_*roi 3 java duration java-time

我正在尝试使用下面的代码将时间字符串转换为毫秒。因为我会将时间用作倒数计时器。

问题是时间来自数据库并且它是 varchar 类型。我试过这段代码,但它没有给我正确的输出。

String timeDuration = "10:00"; //for example only
SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
Date time = sdf.parse(timeDuration);
long millis = time.getTime(); //The output must be 600000
Run Code Online (Sandbox Code Playgroud)

我使用此代码得到错误的“毫秒”。

我正在使用 Android Studio。

Arv*_*ash 5

持续时间与日期时间不同

持续时间与日期时间不同,因此您不应将字符串解析为日期时间类型。Date-Time 类型(例如java.util.Date)表示时间点,而持续时间表示时间长度。您可以从以下示例中理解:

  1. 我一直在读这本书10分钟。
  2. 下午 4:00开始读这本书。

第一个示例具有持续时间,而第二个示例具有日期时间(隐式今天)。

时间

java.util日期时间API及API格式,SimpleDateFormat都已经过时,而且容易出错。建议完全停止使用它们并切换到现代 Date-Time API *

使用java.time现代日期时间 API 的解决方案:

您可以将您的字符串转换为ISO 8601 格式的 Duration,然后解析生成的字符串Duration,您可以将其转换为毫秒。

演示:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        System.out.println(durationToMillis("10:00"));
    }

    static long durationToMillis(String strDuration) {
        String[] arr = strDuration.split(":");
        Duration duration = Duration.ZERO;
        if (arr.length == 2) {
            strDuration = "PT" + arr[0] + "M" + arr[1] + "S";
            duration = Duration.parse(strDuration);
        }
        return duration.toMillis();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

600000
Run Code Online (Sandbox Code Playgroud)

ONLINE DEMO

Trail: Date Time 中了解有关现代日期时间 API 的更多信息。