尝试使用joda时间库解析Facebook访问 token 的到期日期时遇到问题。
这就是我的方法:
public static DateTime parseDate(String date_string){
DateTime dateTime = DateTime.parse(date_string, DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss zzz yyyy"));
return dateTime;
}
我正在这样调用方法:
DateTime fb_token_expire_date;
fb_token_expire_date = parseDate(fb_token_expire_date_str);
在我的情况下,fb_token_expire_date_str看起来像这样:“2015年1月6日星期二14:15:21 OEZ”
但是,当我尝试运行程序时,出现此错误:
Caused by: java.lang.IllegalArgumentException: Invalid format: "Tue Jan 06 14:15:21 OEZ 2015"
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:899)
at org.joda.time.DateTime.parse(DateTime.java:160)
我觉得它与时区有关,但我不知道如何解决。我希望你能帮助我。
最佳答案
是的,你猜对了。
时区名称无法解析。
主要是因为“z”或您的情况下的“zzz”不是国际标准。
签出:This question
编辑
我测试了一个没有臭名昭著的“zzz”的模式,并从字符串中修剪了时区,一切正常:
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.DateTimeFormatterBuilder;
import org.joda.time.format.DateTimeParser;
public class parser {
public static void main(String args[]) throws ClassNotFoundException {
String originaldate = new String("Tue Jan 06 14:15:21 OEZ 2015");
String trimmeddate = originaldate.substring(0,19);
String trimmedyear = originaldate.substring(23);
String trimmed = trimmeddate+trimmedyear;
DateTimeParser[] parsers = {
DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss yyyy").getParser() };
DateTimeFormatter formatter = new DateTimeFormatterBuilder().append(
null, parsers).toFormatter();
DateTime date1 = formatter.parseDateTime(trimmed);
System.out.println(date1);
}
}