3

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)(実際、現在実施しているソリューションは通常のソリューションです。表現と長い構文解析)。タイムゾーンを使用してミリ秒単位でこの時間を簡単に抽出し、面倒な手動処理なしで日付にすばやく解析できる、よりクリーンなソリューションを探しています。誰かが何かアイデアを持っているか、上記の私のロジックのエラーを見つけることができますか?ヘルプは大歓迎です。

4

2 に答える 2

3

文字列のミリ秒値を取得します。

/Date(1353447000000+0000)/

その値を long として Date コンストラクターに渡します。

Date date = new Date(1353447000000);

SimpleDateFormat を使用して日付オブジェクトをフォーマットします。

于 2012-12-07T17:02:08.543 に答える
1

それはあなたが今やっていることのほとんどですが、手動の方法に大きな問題があるとは思いません-そこに行かなければならないのは残念です!

自衛隊だけでできるとは思えない。これにより、合理的に「エレガントに」日付が表示されます。

Date date = new Date(Long.parseLong(weirdDate.split("[^\\d]")[6]));

すでに検討されていると思いますが、API のプロデューサーと話をして、なぜこのような奇妙な形式でこの値を出力しているのかを確認しましたか? インターフェースが公開されていない、または普及していない場合、彼らはそれをもう少し従来のものに変更することを検討するかもしれません.

于 2012-12-07T17:40:04.087 に答える