如何从Java-JodaTime格式化PeriodFormatter以处理如下字符串:
“10s”=(长)10000; < - 我解决了。
“10ms”=(长)10
“10”=长10.< - 只有这是我的问题!
我可以使用此链接处理Joda Time的前两个命令:
Parsing time strings like "1h 30min"
但是我的问题:如何将“10”转换为millisec。没有空的附加?
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendSeconds().appendSuffix("s")
.appendMillis().appendSuffix("ms")
.append###########().appendSuffix("") // <--here is my problem. Keep it empty won't work: InvalidFormatException
.toFormatter();
Period p = formatter.parsePeriod("10s"); // <-- this works
p = formatter.parsePeriod("10"); // <-- Here is my problem. It should be 10 millisec.
System.out.println("Time in millisec.: "+p.getMillis());
我在文档或Google中找不到任何内容。谢谢你的帮助。
作为解决方法我使用Joda-Code上面的正则表达式来捕获仅包含数字的字符串:
if (time.matches("[0-9]+")) {
return Long.parseLong(time);
}
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendWeeks().appendSuffix("w")
.appendDays().appendSuffix("d")
.appendHours().appendSuffix("h")
.appendMinutes().appendSuffix("m")
.appendSeconds().appendSuffix("s")
.appendMillis().appendSuffix("ms")
.toFormatter();
return p.toStandardDuration().getMillis();
答案 0 :(得分:0)
如果输入不包含文字,则只需将其从构建器模式中删除即可。因此,只需解析一个数字到毫秒即可通过以下简单代码解决:
PeriodFormatter pf = new PeriodFormatterBuilder()
.appendMillis()
.toFormatter();
Period p = pf.parsePeriod("10");
System.out.println("Time in millisec.: " + p);
// Time in millisec.: PT0.010S
System.out.println("Time in millisec.: " + p.getMillis());
// Time in millisec.: 10
答案 1 :(得分:0)
这里没有正则表达式的解决方案:
PeriodFormatter f = new PeriodFormatterBuilder()
.appendSeconds().appendSuffix("s")
.appendMillis().appendSuffix("ms")
.appendMillis()
.toFormatter();
老实说,这有点像黑客,也会解析像"1s10ms10"
这样的字符串,这很尴尬,但这是一个你不应该遇到的边缘情况,更重要的是,它会实现你想要的。将正确评估以下字符串:"1s10ms"
,"1s"
,"10ms"
,"10"