Java JodaTime:“123”应该是(长)123。如果没有例如“ms”,我怎么能这样做呢:“10ms”?

时间:2015-08-31 09:46:19

标签: java jodatime periodformatter

如何从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();      

2 个答案:

答案 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"