我试图用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);