我的时间格式有问题。有时我的值是hh:mm:ss,有时是mm:ss格式。
我的代码看起来像:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String time = "01:48:00"
Date remainedTimeDate = sdf.parse(time);
它工作,当我得到格式hh:mm:ss,但当我有时间在格式mm:ss我得到一个错误,如,值不能被解析。是否可以动态更改日期格式?
我的时间格式有问题。有时我的值是hh:mm:ss,有时是mm:ss格式。
我的代码看起来像:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String time = "01:48:00"
Date remainedTimeDate = sdf.parse(time);
它工作,当我得到格式hh:mm:ss,但当我有时间在格式mm:ss我得到一个错误,如,值不能被解析。是否可以动态更改日期格式?
3条答案
按热度按时间s4n0splo1#
是的,你能做到。基于if条件,例如,如果hour和min的大小写都比较小,则可以更改构造函数。但是请注意,简单的日期格式不是线程安全的。使方法同步或锁定简单日期格式对象。
0yycz8jy2#
java.time.duration文件
假设您的字符串表示一个时间量(例如,一个持续时间),那么在java中使用它的正确类是
Duration
来自java.time,现代java日期和时间api。不幸的是Duration
无法从框中分析字符串。它有一个parse
只接受iso 8601格式的方法。iso 8601格式的持续时间如下所示PT1H48M30S
. 它一开始看起来很不寻常,但当你知道怎么读的时候就很简单了。阅读刚刚给出的示例,时间为1小时48分30秒。因此,要解析hh:mm:ss和mm:ss格式的字符串,我首先使用几个正则表达式将它们转换为iso8601。此外,我的代码还演示了如何将每个持续时间转换为毫秒。输出为:
链接
oracle教程:date time解释如何使用java.time。
维基百科文章:iso 8601
chy5wohz3#
日期时间api中没有内置的功能来执行此操作。此外,遗留的日期时间api(
java.util
日期时间类型及其格式api,SimpleDateFormat
)过时且容易出错。建议完全停止使用并切换到java.time
,现代日期时间api*。你可以用正则表达式模式匹配字符串,
\d{1,2}:\d{1,2}
意思是用冒号分隔的一个或两个数字。如果比赛成功,请预赛00:
将其转换为HH:mm:ss
格式。演示:
输出:
从trail:date-time了解有关现代日期时间api的更多信息。