我正在尝试使用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”已在联系4中正确格式化,但在Samsung 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)
有任何想法吗?
最佳答案
您在解析中可能会遇到特定于区域设置的问题。
从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);