解析字符串到JodaTime的格式问题无效

时间:2011-08-16 16:20:21

标签: java jodatime

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转换为字符串而不会出现问题

感谢您寻找

1 个答案:

答案 0 :(得分:11)

看看你的模式 - 你指的是“MM”两次。这不可能是正确的。那将尝试从文本的两个不同位解析相同的字段(在这种情况下为月)两次。你期望赢得哪个?你想要:

DateTimeFormat.forPattern("yyyyMMdd HHmm")

查看documentation for DateTimeFormat,了解一切意味着什么。

请注意,虽然使用该模式调用toString会生成一个字符串,但它不会生成您想要它的字符串。如果由于外壳输出甚至包括“YYYY”和“DD”,我不会感到惊讶,虽然我现在无法测试它。至少你有两个月而不是最后出现的分钟。