Parse (parse.com) が sqlite テーブルに格納した日時文字列を joda-time でフォーマットする際に問題が発生しています。
Sqlite 作成文字列: "createdDate date time"
解析日をテーブルに格納: "挿入... 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 の databrowser では、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" at org.joda.time.format.DateTimeFormatter.parseDateTime"
2 番目の 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)));
2 つの出力が得られます。
2013 年 1 月 25 日金曜日 15:14:11 PST
2013 年 6 月 25 日 (火) 17:11:44 PDT
変換された日付には PST が表示され、標準の日付には PDT が表示されるのはなぜですか?