我正在尝试将文本解析为持续时间,如下所示:
final Duration duration = TimeUtil.parseDuration("1.0:00:00");
但是我收到以下错误,
Text cannot be parsed to a Duration
谁能告诉我我的问题在哪里?
最佳答案
如果您正在使用协议缓冲区的TimeUtil
,请指定一个持续时间,以秒为单位,以纳秒为间隔。如果持续时间为负,则该值可以以负号开头(这样,将持续时间添加到某个时间将相对于该时间移入过去)。字符串必须以“ s”结尾。
您可以在公共git [hub]存储库的parse中看到协议缓冲区持续时间的非常简单的toString和TimeUtil
。
给定持续时间的类型,我猜想它们用于日期时间的计算,该日期时间内部表示为自unix纪元以来的有符号64位纳秒。
换句话说,看起来这些是有效的持续时间:
"1s" // one second forward
"1.0s" // one second forward
"1.01s" // one second, 10,000,000 nano seconds forward
"-1.01s" // one second, 10,000,000 nano seconds backward
"60s" // one minute forward
"-86400s" // yesterday (one day backward)
// [assuming no daylight savings changes or leap seconds happened]
Protocol Buffers的
TimeUtil.parseDuration
不会给您您说到的错误消息,并且根本不像Duration.parse
(即more clearly documented)那样,并且可能会给出这种错误消息。