任何人都知道Java库可以将时间字符串(例如“30min”或“2h 15min”或“2d 15h 30min”)解析为毫秒(或某种Duration对象)。 Joda-Time可以做这样的事情吗?

(我维护这种方法的方法很丑陋,并且想摆脱它/将其替换为性能更好的方法。)

最佳答案

您可能需要针对自己的格式进行一些调整,但可以尝试以下方法:

PeriodFormatter formatter = new PeriodFormatterBuilder()
    .appendDays().appendSuffix("d ")
    .appendHours().appendSuffix("h ")
    .appendMinutes().appendSuffix("min")
    .toFormatter();

Period p = formatter.parsePeriod("2d 5h 30min");

请注意,如果您需要使appendSuffix更灵活,则可以使用variants参数。

更新:Joda Time已添加了 Period.toStandardDuration() ,从那里您可以使用 getStandardSeconds() 以秒为单位获取经过的时间,作为long

如果您使用的是没有这些方法的旧版本,则仍可以通过假设一天中的标准24/hr,60min/hr等来自己计算时间戳。(在这种情况下,请利用DateTimeConstants类中的常量避免使用魔数(Magic Number)。)

09-08 07:10