2011-08-16 38 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」,我不會感到驚訝,儘管我現在無法測試。至少你會有兩個月的時間,而不是最後出現的時間。