【问题标题】:Jodatime LenientChronology parser double countingJoda Time Lenient Chronology 解析双重计数
【发布时间】:2017-11-21 09:54:13
【问题描述】:

以下 Scala 代码返回 121,000 毫秒,而不是预期的 61,000 毫秒。这也适用于其他字段(例如一天中的小时),并且似乎是由于两次计算超出范围的值造成的。 LenientChronology 的文档和测试似乎没有说明这种行为,所以想知道是否有人知道或可以为这种行为提供解释。

import org.joda.time.chrono.{ISOChronology, LenientChronology}
import org.joda.time.format.DateTimeFormatterBuilder

val secondNumber = "61"

val lenientChronology = LenientChronology.getInstance(ISOChronology.getInstanceUTC)

val lenientParser = new DateTimeFormatterBuilder()
  .appendSecondOfMinute(1).toFormatter.withChronology(lenientChronology)

lenientParser.parseMillis(secondNumber)

【问题讨论】:

  • 看起来像一个错误。我建议您在 Joda-issue-tracker 上提交问题,因为该项目仍处于维护模式(没有增强功能,但会继续修复错误)。
  • @MenoHochschild 我已经提出了github.com/JodaOrg/joda-time/issues/432

标签: parsing jodatime


【解决方案1】:

我们也可以使用 PeriodFormatterBuilder 代替:

导入 org.joda.time.format.PeriodFormatterBuilder

val hoursMinutes = new PeriodFormatterBuilder().appendHours().appendLiteral(":").appendMinutes().appendLiteral(":").appendSeconds().toFormatter val duration = hoursMinutes.parsePeriod("40:50:23").toStandardDuration duration.getMillis

它即时处理 LenientChronology

【讨论】:

    猜你喜欢
    • 2014-04-08
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2011-03-19
    相关资源
    最近更新 更多