如何使用 JodaTime 解析 "HHmm" 格式的持续时间?

How to parse duration in format "HHmm" using JodaTime?

我正在尝试将日期时间按 "HHmm" 格式获得的持续时间移动,例如“0010”表示 10 分钟。

我找到了类似的工单 (Parsing time strings like "1h 30min"),但我无法使其正常工作。

代码如下:

PeriodFormatter hoursMinutes = new PeriodFormatterBuilder().appendHours().appendMinutes().toFormatter();
Duration duration = hoursMinutes.parsePeriod("0010").toStandardDuration();
duration.getStandardMinutes(); //Returns 600

出于某种原因,我得到的是 600 分钟而不是 10 分钟。所以看起来分钟被解释为小时,但我不明白为什么。我尝试添加 .maximumParsedDigits(2) 几个小时,但结果是一样的。

为什么我的代码是错误的?还有其他方法可以初始化持续时间解析器吗?有些东西,我可以只使用标准格式,如 "HHmm"?

根据 documentation:

getStandardMinutes

public long getStandardMinutes()

Gets the length of this duration in minutes assuming that there are the standard number of milliseconds in a minute. This method assumes that there are 60 seconds in a minute and 1000 milliseconds in a second. All currently supplied chronologies use this definition.

This returns getMillis() / 60000. The result is an integer division, thus excess milliseconds are truncated.

Returns: the length of the duration in standard seconds

看到 600 实际上是 10 分钟秒 (60 * 10),您得到了您期望的答案。

所以问题确实与最大解析数字有关。我只需要在几小时前添加它,而不是几分钟。所以解决方案是这样的:

PeriodFormatter hoursMinutes =
                new PeriodFormatterBuilder().maximumParsedDigits(2).appendHours().appendMinutes().toFormatter();
Duration duration = hoursMinutes.parsePeriod("0010").toStandardDuration();
duration.getStandardMinutes(); //Returns 10