String dateString = "20110706 1607";
DateTimeFormatter dateStringFormat = DateTimeFormat.forPattern("YYYYMMDD HHMM");
DateTime dateTime = dateStringFormat.parseDateTime(dateString);
产生的堆栈跟踪:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "201107206 1607" is malformed at " 1607"
at org.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:644)
at org.joda.time.convert.StringConverter.getInstantMillis(StringConverter.java:65)
at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:171)
at org.joda.time.DateTime.<init>(DateTime.java:168)
......
有什么想法?如果我使用模式“YYYYMMDD”将字符串截断为20110706,它可以工作,但我也需要小时和分钟值。奇怪的是,我可以使用相同的模式“YYYYMMDD HHMM”将Jodatime DateTime转换为字符串而不会出现问题
感谢您寻找
答案 0 :(得分:11)
看看你的模式 - 你指的是“MM”两次。这不可能是正确的。那将尝试从文本的两个不同位解析相同的字段(在这种情况下为月)两次。你期望赢得哪个?你想要:
DateTimeFormat.forPattern("yyyyMMdd HHmm")
查看documentation for DateTimeFormat
,了解一切意味着什么。
请注意,虽然使用该模式调用toString
会生成一个字符串,但它不会生成您想要它的字符串。如果由于外壳输出甚至包括“YYYY”和“DD”,我不会感到惊讶,虽然我现在无法测试它。至少你有两个月而不是最后出现的分钟。