如何告诉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");
答案 0 :(得分:5)
您需要非常仔细地阅读documentation for pattern characters:
yyyy
而不是YYYY
,因为您需要常规日历年而不是年代。 (在Joda Time中可能不太重要,但是如果您将代码移植到SimpleDateFormat
,YYYY
将意味着周年,这是您真正不想要的。)HH
而不是hh
dd
而不是DD
的某一天(您不希望每年的某一天)所以:
DateTimeFormat.forPattern("yyyyMMddHHmm").parseDateTime("201410171500");
答案 1 :(得分:2)
模式区分大小写:
大写字母D是日期,可以有3位数,小写字母“h”是12小时。
所以你必须将你的模式改为:
DateTimeFormat.forPattern("yyyyMMddHHmm").parseDateTime("201410171500");
第189天的D日
每月第10天的日期
半天(1~12)12号时钟一天中的H小时(0~23)数字0
答案 2 :(得分:0)
请使用
DateTimeFormat.forPattern("YYYYMMDDHHmm")
因为h - >半天的时钟(1~12)
参考 - http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html