2011-08-16 40 views
4
String dateString = "20110706 1607"; 
    DateTimeFormatter dateStringFormat = DateTimeFormat.forPattern("YYYYMMDD HHMM"); 
    DateTime dateTime = dateStringFormat.parseDateTime(dateString); 

得到的堆栈跟踪:格式无效问题解析字符串JodaTime

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,它可以工作,但我需要小时和分钟值。有什么奇怪的是,我可以用相同模式“年月日HHMM”一Jodatime日期时间转换为字符串没有问题

感谢你的格局看

+1

不要认为这是问题,但第二套“MM”应该是“mm” – Jim

+0

错误消息中的文本与您给出的字符串不匹配 - 是否有*真的*第二个2在年/月/日部分? (201107206) –

+0

问题解决了,我没有使用在dateString中引入附加字符的正确格式模式(请参阅stacktrace)。谢谢Skeet先生! – Hoofamon

回答

11

看 - 你指定“MM”的两倍。这不可能是正确的。这将试图从文本的两个不同位解析相同的字段(本例中的月份)两次。你期望赢哪个?你想:

DateTimeFormat.forPattern("yyyyMMdd HHmm") 

看看documentation for DateTimeFormat看看什么意思。

请注意,虽然使用该模式调用toString将产生一个字符串,它不会产生你想要的它的字符串。如果输出包括“YYYY”和“DD”,我不会感到惊讶,尽管我现在无法测试。至少你会有两个月的时间,而不是最后出现的时间。