簡體   English   中英

如何在 Java 中將字符串時間轉換為長毫秒

[英]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

我使用此代碼得到錯誤的“毫秒”。

我正在使用 Android Studio。

持續時間與日期時間不同

持續時間與日期時間不同,因此您不應將字符串解析為日期時間類型。 Date-Time 類型(例如java.util.Date )表示時間點,而持續時間表示時間長度。 您可以從以下示例中理解:

  1. 我一直在讀這本書的10分鍾。
  2. 下午 4:00 開始讀這本書。

第一個示例具有持續時間,而第二個示例具有日期時間(隱式今天)。

時間

java.util Date-Time API 及其格式化 API SimpleDateFormat已過時且容易出錯。 建議完全停止使用它們並切換到現代 Date-Time API *

使用現代日期時間 API java.time解決方案:

您可以將字符串轉換為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();
    }
}

輸出:

600000

在線演示

Trail: Date Time 中了解有關現代日期時間 API 的更多信息。

非常不鼓勵使用 SimpleDateFormat 和 Date 類。 這些類已被棄用並且非常有問題。 改用包 java.time。 對於解析器使用DateTimeFormatter類。 此外,在您的情況下,您可以使用類Duration 或者,您可以使用具有類TimeInterval和方法TextUtils.parseStringToTimeInterval(java.lang.String valueStr) 的開源 MgntUtils 庫。 在這種情況下,您的代碼可能非常簡單:

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

結果這會給你 600000。 該庫可作為Maven構件在這里,並在github上(包括源代碼和Javadoc)在這里 這是Javadoc的鏈接。 關於圖書館的文章在這里(見段落“解析字符串到時間間隔”)

免責聲明:圖書館是我寫的

我認為您可以先剪切子字符串。 然后將子字符串轉換為整數。 然后乘以 60000。

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

HTH

干杯,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM