【问题标题】:Joda time parsing time with more than 24 hourJoda时间解析时间超过24小时
【发布时间】:2016-11-16 07:27:27
【问题描述】:

是否有可能使用“2016-07-13T25:50”之类的日期解析时间以获取值为“2016-07-14T01:50”的 LocalDateTime?我只想使用 Joda 时间和 java.util。

【问题讨论】:

  • 您不想使用 Java 8 内置的 JSR-310?
  • 只是想知道:我们的需求从何而来?这只是大约25小时吗?还是您也想接受 99 分钟?还是 343 分钟?
  • 我不能使用 java 1.8,因为项目是用 1.7 编写的。
  • 因为我需要解析 24 小时,而 joda 时间不能。
  • 在 T 字符上分割日期/时间。使用 SimpleDateFormat 解析日期。使用您自己的自定义代码解析时间。将时间添加到日期并使用另一个 SimpleDateFormat 生成输出日期/时间。

标签: java parsing jodatime


【解决方案1】:

您可以在 Joda-Time 中使用宽松的年表:

LenientChronology lenientChrono = LenientChronology.getInstance(ISOChronology.getInstance());
DateTimeFormatter formatter = 
  DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm").withChronology(lenientChrono);
LocalDateTime ldt = formatter.parseLocalDateTime("2016-07-13T25:50");
System.out.println("lenient=" + ldt); // 2016-07-14T01:50:00.000

【讨论】:

    【解决方案2】:

    如果不编写自定义解析器似乎是不可能的,因为 Joda 和 Java 8 DateTime API(很大程度上受 Joda 的启发)与 ISO-8601 日历系统一起使用并且不允许这种格式。

    来自Wikipedia 关于持续时间的引用:

    或者,基于组合日期和时间表示的持续时间格式可以通过通信双方之间的协议使用基本格式 PYYYYMMDDThhmmss 或扩展格式 P[YYYY]-[MM]-[DD]T[ hh]:[mm]:[ss]。例如,上面显示的第一个持续时间是“P0003-06-04T12:30:05”。但是,单个日期和时间值不能超过它们的模数(例如,一个月的值是 13 或小时的值是 25 是不允许的)。

    API docs 中提供了可用的 DateTimeFormatters 列表。

    【讨论】:

      猜你喜欢
      • 2019-06-08
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多