外部サービスから、Date+Time
フィールドがString
の形式のオブジェクト2012-03-07 12:12:23.547
を取得します。これらのフィールドを比較して、オブジェクトの正しい順序を取得する必要があります。Date
SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS")などを使用してオブジェクトを作成し、2つを比較してこれを実現できることはよく知っていますDate
が、私の質問は、正しい並べ替え順序に依存できるかどうかです。それらをString.compareTo(String)
?などの文字列として比較すると、いくつかの軽いテストはそれがうまくいくという印象を私に与えます、しかし私は誰かがそれが私に正しい結果を与えないであろうシナリオを知っているかどうか疑問に思いますか?String
また、比較する日付への解析との比較について、パフォーマンスに関する考慮事項、長所または短所はありますか?
6 に答える
時間が24時間形式であると仮定すると、そうです、それは並べ替え可能な日付/時刻形式です。そのよく知られた利点の1つは、実際に解析せずに並べ替えることができることです。
1つの欠点:悪いデータを取得した場合、それを見つけることはできません。2月30日に与えられたという事実を無視して、データを「正しい」場所にきちんと分類するだけです。
後で日付/時刻として値が必要な場合は、最初にそれを解析してから比較します。ただし、順序付けに関してのみこれが必要な場合は、文字列の比較がすべてを解析するよりも高速になる可能性があります。もちろん、ベンチマークの価値はあります...特に同じ日に2つの文字列を比較するには、チェックする価値のある数文字が必要ですが、一度解析した場合は、おそらくlong
値を比較するだけです。
いいえ、より良いアプローチは、日付オブジェクトの文字列を解析してから、他の日付オブジェクトと比較することです。
このコードがボトルネック(ループ内で何度も呼び出される)になると考える理由がない限り、パフォーマンスについて心配する必要はありません。それでも、具体的なパフォーマンステストができるようになるまで待ちます。
それらを日付として比較すると、コードがより明確になり、将来、日付形式をより簡単に変更できるようになります(文字列としてソートされないものに)。
それは提供されて動作します
- フィールドを最も重要なものから最も重要でないものの順に並べます。
- 数値フィールド(1月/ 2月ではない)を使用し、それらは同じ幅です。たとえば、2:15は12:15の後ですが、02:15は予想どおり前です。注:9999から0001より前の年は、これは機能しません。
- 無効な日付が検出されない可能性があることを承諾します。
それが表すタイプを使用します-この場合は日付なので、日付を使用します。日付は、コレクションに追加し、日付に対してCollections.sort(dates)を実行することで、時系列で簡単に並べ替えることができます。
http://docs.oracle.com/javase/tutorial/collections/interfaces/order.htmlを参照してください
日付は比較されるか、ミリ秒(長い)で比較できると思います。おそらくより安全な方法です。文字列の比較がいつ適合しないかを考える必要はありません。