APIから返され、見たことがない日付形式の解析に問題があります(カスタム形式だと思います)。日付の例:
/Date(1353447000000+0000)/
この形式に最初に遭遇したとき、それがタイムゾーンオフセットのあるミリ秒単位の時間であることがわかるのにそれほど時間はかかりませんでした。SimpleDateFormatを使用してこの日付を抽出するのに問題があります。これが私の最初の試みでした:
String weirdDate = "/Date(1353447000000+0000)/";
SimpleDateFormat sdf = new SimpleDateFormat("'/Date('SSSSSSSSSSSSSZ')/'");
Date d1 = sdf.parse(weirdDate);
System.out.println(d1.toString());
System.out.println(d1.getTime());
System.out.println();
Date d2 = new Date(Long.parseLong("1353447000000"));
System.out.println(d2.toString());
System.out.println(d2.getTime());
そして出力:
Tue Jan 06 22:51:41 EST 1970
532301760
Tue Nov 20 16:30:00 EST 2012
1353447000000
日付(および解析されたミリ秒数)も近くになく、その理由を理解できませんでした。トラブルシューティングを行った結果、SDFの使用方法に明らかに欠陥があることがわかりました。例:
String weirdDate = "1353447000000";
SimpleDateFormat sdf = new SimpleDateFormat("S");
Date d1 = sdf.parse(weirdDate);
System.out.println(d1.toString());
System.out.println(d1.getTime());
そして出力:
Wed Jan 07 03:51:41 EST 1970
550301760
SDFをこのように使用して、ミリ秒単位の時間を解析しようとしたことがあるとは言えません。これは、通常は使用Long.parseLong()
して直接渡すためですnew Date(long)
(実際、現在実施しているソリューションは通常のソリューションです。表現と長い構文解析)。タイムゾーンを使用してミリ秒単位でこの時間を簡単に抽出し、面倒な手動処理なしで日付にすばやく解析できる、よりクリーンなソリューションを探しています。誰かが何かアイデアを持っているか、上記の私のロジックのエラーを見つけることができますか?ヘルプは大歓迎です。