我正在尝试将字符串(如1h 30m 5s或5m、38s或1h 3s )转换为表示总时间(以秒为单位)的整数值。例如,1m 20s将导致80秒内的整数值为80。
我在用Joda的时间:
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendDays().appendSuffix("d").appendSeparatorIfFieldsAfter(" ")
.appendHours().appendSuffix("h").appendSeparatorIfFieldsAfter(" ")
.appendMinutes().appendSuffix("m").appendSeparatorIfFieldsAfter(" ")
.appendSeconds().appendSuffix("s")
.toFormatter();
int time = formatter.parsePeriod("30s").getSeconds(); //Throws IllegalArgumentException使用我传入的几乎每一个字符串抛出一个IllegalArgumentException,表示“无效格式”。
我不明白为什么这不管用。我不能在没有illegalArgumentException的情况下把任何东西传递到这里。有人对如何调整我的格式化程序设置以达到我想要的结果有任何指导吗?
发布于 2022-06-01 01:30:21
Joda-Time项目现在处于维护模式。它的创建者继续领导JSR 310,它将现在内置到Java8及更高版本中的java.time类。
独立于时间线的ISO 8601标准一段时间的格式是PnYnMnDTnHnMnS,其中P标志着开始,而T将这两个部分分开。
java.time类在解析/生成文本时默认使用ISO8601标准格式。因此,不需要指定格式模式。
所以我会用简单的文本操作来解决你的问题。删除您的空格字符。改为大写。
java.time.Duration.parse( "PT" + "1h 30m 5s".replace( " " , "" ).toUpperCase() )https://stackoverflow.com/questions/72454198
复制相似问题