java - 如何使用 joda 解析 24 小时制的日期?

标签 java datetime jodatime

如何告诉 joda-time 自动检测 24 小时字符串并相应地解析它们?

DateTimeFormat.forPattern("YYYYMMDDhhmm").parseDateTime("201410171500");

结果:

org.joda.time.IllegalFieldValueException: Cannot parse "201410171500": Value 50 for clockhourOfHalfday must be in the range [1,12]
    at org.joda.time.field.FieldUtils.verifyValueBounds(FieldUtils.java:234)
    at org.joda.time.field.ZeroIsMaxDateTimeField.set(ZeroIsMaxDateTimeField.java:86)
    at org.joda.time.format.DateTimeParserBucket$SavedField.set(DateTimeParserBucket.java:568)
    at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:447)
    at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:411)
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:882)

顺便说一句,这很奇怪:以下代码可以正常工作而不会出现错误:

DateTimeFormat.forPattern("YYYYMMDDHH").parseDateTime("2014101715");

最佳答案

您需要阅读documentation for pattern characters非常仔细:

  • 您需要 yyyy 而不是 YYYY,因为您需要常规日历年而不是年份。 (在 Joda Time 中不太可能很重要,但如果您移植代码以使用 SimpleDateFormatYYYY 将表示周年,这是您确实不想要的。)
  • 您需要使用 HH 而不是 hh 来表示 24 小时制
  • 您需要使用 dd 而不是 DD 来表示月份中的某一天(您不需要使用年份中的某一天)

所以:

DateTimeFormat.forPattern("yyyyMMddHHmm").parseDateTime("201410171500");

关于java - 如何使用 joda 解析 24 小时制的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28340491/

相关文章:

java - 将 SQL Server 日期数据获取到 Joda 对象的最佳方法?

eclipse - Jodatime:导入org.joda.time.Weeks无法解析

java - 在 Bouncy caSTLe 中使用 SHA256 的 ECDSA 抛出 No Such Algorithm Exception

java - OffsetDateTime 到毫秒

java - 使用 WinRun4j 记录 Windows 服务中的异常

sql - 从 now() 函数中减去小时数

c# - 任意System.DateTime到四个字符的军事时间字符串

java - 如何在java或JODA中获取另一个时区的时间戳

java - java.nio.file.Files类中exists()方法的行为

java - 如何在 JSON 数组中提取 JSON 数组