如何告诉 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 中不太可能很重要,但如果您移植代码以使用SimpleDateFormat
,YYYY
将表示周年,这是您确实不想要的。) - 您需要使用
HH
而不是hh
来表示 24 小时制 - 您需要使用
dd
而不是DD
来表示月份中的某一天(您不需要使用年份中的某一天)
所以:
DateTimeFormat.forPattern("yyyyMMddHHmm").parseDateTime("201410171500");
关于java - 如何使用 joda 解析 24 小时制的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28340491/