Joda DateTimeFormat在多个设备中表现不同(Android)

时间:2013-01-22 14:33:39

标签: android datetime jodatime

我正在尝试使用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”它在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 个答案:

答案 0 :(得分: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);