尝试使用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)
我觉得它与时区有关,但我不知道如何修复它。我希望你能帮助我。
答案 0 :(得分:1)
是的,你猜对了。 无法解析时区名称。 主要是因为" z"或者在你的情况下" zzz"不是国际标准。
修改
我已经测试了一种没有臭名昭着的“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来解决问题,然后使用该长号创建一个新日期。
解决这个日期格式并没有解决问题,但在我的情况下是一个解决方案。