我正在尝试使用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)
有什么想法吗?
答案 0 :(得分: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);