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

How to convert String time to Long milliseconds in Java

我正在尝试使用以下代码将时间字符串转换为毫秒。因为我会把时间当倒计时。

问题是时间来自数据库,而且是 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

我在使用此代码时得到了错误的“millis”。

我正在使用 Android Studio。

我觉得你可以先截断子串。然后将子字符串转换为整数。然后乘以 60000.

Integer.parseInt(timeDuration.substring(0, timeDuration.indexOf(":"))) * 60 * 1000

HTH

干杯,

挂钩

使用 类 SimpleDateFormat 和 Date 非常强烈 不鼓励。这些 类 已被弃用并且非常有问题。请改用包 java.time。供解析器使用 DateTimeFormatter class. Also, in your case you may use class Duration. Alternatively, you can use Open Source MgntUtils library That has class TimeInterval and method TextUtils.parseStringToTimeInterval(java.lang.String valueStr)。在这种情况下,您的代码可能非常简单:

long milliseconds = TextUtils.parseStringToTimeInterval("10m").toMillis();

这会给你 600000 作为结果。该库可用作 Maven 工件 here, and on the github (including source code and Javadoc) here. Here is a link to Javadoc. The article about the library is here(请参阅“将字符串解析为时间间隔”段落)

免责声明: 这个库是我写的

持续时间与日期时间不同

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

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

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

java.time

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

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

您可以将您的字符串转换为 ISO 8601 format for a Duration and then parse the resulting string into 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();
    }
}

输出:

600000

ONLINE DEMO

Trail: Date Time.

了解有关现代日期时间 API 的更多信息