我在使用 joda-time 格式化 Parse (parse.com) 存储在 sqlite 表中的日期时间字符串时遇到问题。
Sqlite 创建字符串: “createdDate 日期时间”
将解析日期存储到表中:“插入... parseObject.getCreatedAt()”
如果我然后使用 SQLite 浏览器检查表,我会看到存储的日期如下:
2013 年 6 月 15 日星期六 15:44:52 PDT
因此,我编写了以下代码将其转换回 DateTime 对象,以作为查询的一部分进行解析,以获取比上次插入表中的项目更新的项目:
DateTimeFormatter format = DatetimeFormat.forPattern("yyyy'-'MM'-'dd'T'HH':'mm':'ss.SSS'Z'");
DateTime dt = formatter.parseDateTime(datahelper.getLastInsertDate(..));
格式化程序是这样的,因为在 Parse 的数据浏览器中,我可以看到 dateTimes 是这样存储的:
2013-06-24T08:11:45.280Z
我得到了一个 ANR,所以我尝试使用以下格式化程序:
DateTimeFormatter format = DatetimeFormat.forPattern("EEE' 'MMM' 'dd' 'HH':'mm':'ss 'z'' 'YYYY");
DateTime dt = formatter.parseDateTime(datahelper.getLastInsertDate(..));
我仍然得到 ANR。eclipse 中的跟踪显示如下:
原因:java.lang.IllegalArgumentException:无效格式:“Tue Jun 25 00:13:29 PDT 2013”在 org.joda.time.format.DateTimeFormatter.parseDateTime”
第二个 ANR 跟踪显示:
格式无效:“Tue Jun 25 00:13:29 PDT 2013”在“PDT 2013”格式不正确
我已经尝试过解决这个问题,因为 joda time 不会将“z”解析为 PDT/PST,所以我将“PDT”放在我的格式化程序中,希望它能够正常工作,但似乎没有任何效果。
有任何想法吗?
编辑 1:使用接受的答案,我有一个时区格式问题)
DateFormat originalFormat = new SimpleDateFormat("EEE MMM DDD HH:mm:ss z yyyy");
Date originaldate = originalFormat.parse(datahelper.getLastInsertdate);
Log.i("converted date: ", String.valueOf(originalDate);
Log.i("a real date: ", "String.valueOf(new Date(new Date().getTime)));
我得到两个输出:
2013 年 1 月 25 日星期五 15:14:11 PST
2013 年 6 月 25 日星期二 17:11:44 PDT
为什么转换后的日期显示 PST,而标准日期显示 PDT?