1

我正在尝试使用 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)

有任何想法吗?

4

1 回答 1

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);
于 2013-01-22T15:03:27.157 回答