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:19GMT」は、Nexus 4で正しくフォーマットされていますが、SamsungGS2で実行すると例外が発生します。私はそれが何であるかを本当に知りません。

例外は次のとおりです。

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 に答える