![](/img/trans.png)
[英]How to convert string with this format to Java 8 time and convert to long milliseconds
[英]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
)表示時間點,而持續時間表示時間長度。 您可以從以下示例中理解:
第一個示例具有持續時間,而第二個示例具有日期時間(隱式今天)。
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.