2013-01-22 22 views
1

我想用Joda時間庫格式化一個日期,但我的問題是它的行爲有所不同,具體取決於它在哪個設備上執行。這是我的代碼:Joda DateTimeFormat在幾種設備中表現不同(Android)

public static String parseDate (String date) 
{ 
    final String datePattern = "yyyy-MM-dd, "; 
    final String hourPattern = "HH:mm"; 

    DateTimeParser[] parsers = { 
      DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss Z").getParser(), 
      DateTimeFormat.forPattern("EEE, dd MMM yyyy HH:mm:ss ZZZ").getParser(), 
      DateTimeFormat.forPattern("yyy-MM-dd'T'HH:mm:ss.SSSZ").getParser()}; 

    DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(null, parsers).toFormatter(); 

    String daux = ""; 
    try 
    { 
     DateTime dt = formatter.parseDateTime(date); 
     String pubDate = dt.toString(datePattern); 
     String pubHour = dt.toString(hourPattern); 
     daux = pubDate + "kl " + pubHour; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    return daux; 
} 

日期「星期二,2012年4月24日11時06分19秒格林尼治標準時間」,它的格式是正確的的Nexus 4,但是當在三星GS2執行時引發一個例外。我真的不知道它會是什麼。

唯一的例外是:

01-22 15:21:05.160: W/System.err(11718): java.lang.IllegalArgumentException: Invalid format: "Sun, 20 Jan 2013 23:27:00 GMT" 
01-22 15:21:05.160: W/System.err(11718): at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:866) 
01-22 15:21:05.160: W/System.err(11718): at com.fotbollskanalen.parser.DateParser.parseDate(DateParser.java:150) 

任何想法?

回答

1

您可能會在解析時遇到特定於語言環境的問題。

DateTimeFormatter.forPattern()的javadoc:

格式可能包含區域特定的輸出,併爲你改變格式化的語言環境,這將發生改變。調用DateTimeFormatter.withLocale(Locale)切換語言環境。例如:

DateTimeFormat.forPattern(pattern).withLocale(Locale.FRANCE).print(dt);

UPD

您應該更改行:

DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(null, parsers).toFormatter().withLocale(Locale.ENGLISH); 
+0

的事情是,它是從一個Web服務中檢索到的日期,以便該區域應該用嗎? – Jatago

+0

@Jatago取決於Web服務使用的語言環境來格式化日期。從你提供的樣本日期看來,它似乎是'Locale.ENGLISH'。 – pingw33n

+0

感謝您的快速響應,但我嘗試使用Locale.english,Locale.UK,Locale.US,並沒有一個幫助...我不明白的一件事是爲什麼它依賴於設備? – Jatago

相關問題