JAVA如何把duration变成整数_java - 如何将Joda的Duration转换为java.time.Duration? - 堆栈内存溢出...

我提出了三种选择

手动将字符串修改为ISO 8601格式,以便java.time.Duration可以解析它。

通过毫秒数转换。

从joda.time.Duration.toString()转换。

修改字符串

就个人而言,我认为我不想依靠Joda-Time。 相反,我会将您的非ISO 8601字符串修改为ISO 8601格式。

String durationString = "1d1s";

// Convert to ISO 8601 format

String isoString = durationString.replaceFirst("(.*?[Dd])?(.*)", "P$1T$2");

java.time.Duration dur = java.time.Duration.parse(isoString);

System.out.println(dur);

输出为:

PT24H1S

我承认正则表达式有点难以阅读。 如果字符串中有大写或小写的D ,则直到D (包括D )的所有内容都将放在ISO字符串中的T之前。 其他所有内容都放在T 。

转换毫秒

这是一个想法,类似于ecerulm的回答。 我不想失去Joda-Time持续时间的毫秒精度,所以我依靠的是毫秒而不是秒(我知道对于您的示例字符串而言,这没有什么区别)。

final PeriodFormatter periodFormatter = new PeriodFormatterBuilder()

.printZeroNever()

.appendDays().appendSuffix("d")

.appendHours().appendSuffix("h")

.appendMinutes().appendSuffix("m")

.appendSeconds().appendSuffix("s").toFormatter();

org.joda.time.Duration myduration = periodFormatter.parsePeriod("1d1s").toStandardDuration();

java.time.Duration dur = java.time.Duration.ofMillis(myduration.getMillis());

结果与以前相同。

转换成字符串

java.time.Duration dur = java.time.Duration.parse(myduration.toString());

同样,结果是相同的。 但是,将持续时间格式化为ISO 8601字符串只是为了解析它,这感觉很浪费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值