Joda Time无效格式到期日期facebook访问令牌Java

时间:2014-11-07 17:14:01

标签: java android parsing jodatime

尝试使用joda时间库解析facebook访问令牌的过期日期时遇到问题。 这就是我的方法:

 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在我的案例中看起来像这样:" Tue Jan 06 14:15:21 OEZ 2015"

但是当我试图运行该程序时,我收到了这个错误:

 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)

我觉得它与时区有关,但我不知道如何修复它。我希望你能帮助我。

3 个答案:

答案 0 :(得分:1)

是的,你猜对了。 无法解析时区名称。 主要是因为" 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);


    }
}

答案 1 :(得分:0)

您似乎正在尝试解析区域名称。根据{{​​3}},无法解析时区名称。

有关您的问题的详细信息,请参阅joda.org

答案 2 :(得分:0)

我现在通过将首选项中的日期保存为long来解决问题,然后使用该长号创建一个新日期。

解决这个日期格式并没有解决问题,但在我的情况下是一个解决方案。