如何使用 joda 解析 24 小时制的日期?
How to parse a date with 24h time using joda?
如何让 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");
模式区分大小写:
大写 D 是星期几,可以有 3 位数字,小写 "h" 是 12 小时。
因此您必须将模式更改为:
DateTimeFormat.forPattern("yyyyMMddHHmm").parseDateTime("201410171500");
D day of year number 189
d day of month number 10
h clockhour of halfday (1~12) number 12
H hour of day (0~23) number 0
请使用
DateTimeFormat.forPattern("YYYYMMDDHHmm")
因为 h -> 半天的时钟时间 (1~12)
参考 - http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html
您需要仔细阅读documentation for pattern characters:
- 您想要
yyyy
而不是 YYYY
,因为您想要常规日历年而不是纪元年。 (在 Joda Time 中不太可能很重要,但如果你移植代码以使用 SimpleDateFormat
,YYYY
将意味着周年,你真的不想要。)
- 你想要
HH
而不是 hh
作为 24 小时制
- 您想要
dd
而不是 DD
作为月中的某天(您不需要年中的某天)
所以:
DateTimeFormat.forPattern("yyyyMMddHHmm").parseDateTime("201410171500");
如何让 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");
模式区分大小写:
大写 D 是星期几,可以有 3 位数字,小写 "h" 是 12 小时。
因此您必须将模式更改为:
DateTimeFormat.forPattern("yyyyMMddHHmm").parseDateTime("201410171500");
D day of year number 189
d day of month number 10
h clockhour of halfday (1~12) number 12
H hour of day (0~23) number 0
请使用
DateTimeFormat.forPattern("YYYYMMDDHHmm")
因为 h -> 半天的时钟时间 (1~12)
参考 - http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html
您需要仔细阅读documentation for pattern characters:
- 您想要
yyyy
而不是YYYY
,因为您想要常规日历年而不是纪元年。 (在 Joda Time 中不太可能很重要,但如果你移植代码以使用SimpleDateFormat
,YYYY
将意味着周年,你真的不想要。) - 你想要
HH
而不是hh
作为 24 小时制 - 您想要
dd
而不是DD
作为月中的某天(您不需要年中的某天)
所以:
DateTimeFormat.forPattern("yyyyMMddHHmm").parseDateTime("201410171500");