【问题标题】:Joda Time invalid format expiration date facebook access token JavaJoda Time 无效格式到期日期 facebook 访问令牌 Java
【发布时间】:2015-01-04 13:19:38
【问题描述】:

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

我感觉它与时区有关,但我不知道如何解决它。我希望你能帮助我。

【问题讨论】:

标签: java android parsing jodatime


【解决方案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);


    }
}

【讨论】:

  • 你打败了我 :) 至少我在那里得到了对 joda.org 的引用。
  • 我如何在没有时区的情况下解析它?还是有其他方法可以解析它?
  • 我编辑了我的回复,thread 已经涵盖了这个问题。
  • 这与我提供的链接相同。再揍你一顿。 :)
  • @user3780814 我认为您必须预先格式化该日期,因为它不是 Java 管理的标准。您必须提供该字符串的 ISO 格式,但您需要为此创建一个函数。
【解决方案2】:

您似乎正在尝试解析区域名称。根据joda.org,无法解析时区名称。

请参阅this thread,了解有关您的问题的更多信息。

【讨论】:

  • 是的,有关于这个问题的信息,但我仍然不知道如何将从 facebook 令牌获得的字符串解析为有效的日期或日期时间,或者检查它是否仍然有效? !
【解决方案3】:

我现在解决了这个问题,方法是将首选项中的日期保存为长日期,然后使用该长数字创建一个新日期。

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

【讨论】:

  • 我和你有同样的问题,你能用'long'更好地解释你的解决方案吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 2020-11-27
相关资源
最近更新 更多