尝试使用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);


    }
}

10-07 18:44