我正在尝试将文本解析为持续时间,如下所示:

  final Duration duration = TimeUtil.parseDuration("1.0:00:00");


但是我收到以下错误,

Text cannot be parsed to a Duration


谁能告诉我我的问题在哪里?

最佳答案

如果您正在使用协议缓冲区的TimeUtil,请指定一个持续时间,以秒为单位,以纳秒为间隔。如果持续时间为负,则该值可以以负号开头(这样,将持续时间添加到某个时间将相对于该时间移入过去)。字符串必须以“ s”结尾。

您可以在公共git [hub]存储库的parse中看到协议缓冲区持续时间的非常简单的toStringTimeUtil

给定持续时间的类型,我猜想它们用于日期时间的计算,该日期时间内部表示为自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)那样,并且可能会给出这种错误消息。

10-07 16:19