如何使用 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
我正在尝试将日期时间按 "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