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。
持续时间与日期时间不同,因此您不应将字符串解析为日期时间类型。Date-Time 类型(例如java.util.Date)表示时间点,而持续时间表示时间长度。您可以从以下示例中理解:
第一个示例具有持续时间,而第二个示例具有日期时间(隐式今天)。
该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)
从Trail: Date Time 中了解有关现代日期时间 API 的更多信息。