2011-11-20 40 views
2

我想從Joda DateTime對象轉換字符串。日期是從SQLlite的DateField來,如:Joda無效的格式異常

2011-11-19 18:29:41 

我正在使用的代碼是:

DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("2011-11-19 18:29:41").withZone(DateTimeZone.getDefault()); 

,但我發現此異常:

java.lang.IllegalArgumentException: Invalid format: "2011-11-19 18:29:41" is malformed at "11-11-19 18:29:41" 

編輯:這裏是我在做什麼更多的細節:

我有一個工具類,它有一個方法,我用來將字符串轉換爲DateT IME:

public static DateTime GetItemDate(final String date, String pattern) 
{ 
    return DateTimeFormat.forPattern(pattern).parseDateTime(date).withZone(DateTimeZone.getDefault()); 
} 

然後我打電話:你實際上已經給出

Utilities.GetItemDate("2011-11-19 18:29:41", "YYYY-MM-dd HH:mm:ss"); 
+0

您給出的代碼適用於我。你能發佈一個簡短但完整的例子來證明這個問題嗎? –

+0

向OP添加了更多詳細信息。 –

+0

它仍然在爲我工作。我發佈了一個簡短但完整的程序,它可以處理你提供的兩種樣本模式。你可以發佈一個類似的簡短但完整的例子,*不*工作? –

回答

4

兩種模式爲我工作(我已經採取了製作方法的名稱遵循Java的命名約定的自由,但身體是一樣的)。

不同,雖然 - 「y」是「年」(可能是負值),而「Y」是「時代年」,這是值得的。

import org.joda.time.*; 
import org.joda.time.format.*; 

public class Test { 
    public static void main(String[] args) { 
     // Works 
     DateTime dateTime = getItemDate("2011-11-19 18:29:41", 
             "yyyy-MM-dd HH:mm:ss"); 

     System.out.println(dateTime); 

     // Works for me too... 
     dateTime = getItemDate("2011-11-19 18:29:41", 
           "YYYY-MM-dd HH:mm:ss"); 

     System.out.println(dateTime); 
    } 

    public static DateTime getItemDate(String date, String pattern) { 
     return DateTimeFormat.forPattern(pattern) 
      .parseDateTime(date) 
       .withZone(DateTimeZone.getDefault()); 
    } 
} 

輸出我的機器上:

2011-11-19T18:29:41.000Z 
2011-11-19T18:29:41.000Z 

其實我建議你指定格式化過的時區 - 否則它會已經使用默認的時區。

你在什麼地方?也許這是造成問題的原因...

+0

好的,也許還有別的我做錯了。這在Android項目中正在使用,如果這有什麼區別的話。我的區域設置是EST。 –

+0

我想通了。我在傳遞參數的代碼的不同部分出現錯誤:yyyy-MM-dd HH:mm:ss a。感謝您的幫助,但這迫使我查看項目的其他部分以解決問題。 –