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



我试图用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;
}
日期"Tue, 24 Apr 2012 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)

任何想法?

您可能在解析中面临特定于语言环境的问题。

From DateTimeFormatter.forPattern() javadoc:

格式可能包含特定于语言环境的输出,这将随着您更改格式化程序的语言环境而改变。调用DateTimeFormatter.withLocale(Locale)来切换区域设置。例如:

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

乌利希期刊指南

你应该把这一行改成:

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

相关内容

  • 没有找到相关文章

最新更新