如何解决如何在 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
)表示时间点,而持续时间表示时间长度。你可以从下面的例子中理解:
- 我已经阅读了这本书 10 分钟。
- 我从下午 4:00 开始阅读这本书。
第一个示例具有持续时间,而第二个示例具有日期时间(隐式今天)。
java.time
java.util
日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern Date-Time API*。
使用 java.time
(现代日期时间 API)的解决方案:
您可以将字符串转换为 ISO 8601 format for a 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 了解有关现代 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 工件 here,并在 github(包括源代码和 Javadoc)here 上提供。这是 Javadoc 的链接。关于库的文章是here(参见段落“Parsing String to Time Interval”)
免责声明:图书馆是我写的
,我认为您可以先剪切子字符串。然后将子字符串转换为整数。然后乘以 60000。
Integer.parseInt(timeDuration.substring(0,timeDuration.indexOf(":"))) * 60 * 1000
HTH
干杯,
钩子
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。