我正在尝试使用Joda时间库格式化日期,但是我的问题是,它的执行方式会有所不同,具体取决于执行的设备。这是我的代码:

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 GMT”已在联系4中正确格式化,但在Samsung 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)


有任何想法吗?

最佳答案

您在解析中可能会遇到特定于区域设置的问题。

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);

09-05 14:39