2012-03-11 11 views
0

日付の昇順にソートしようとしているJava Dateオブジェクトが多数あります。Java Dateオブジェクトをソートして比較すると、予期しない結果が発生する

英国の形式「dd/mm/yy HH:ss」の単純な日付フォーマッタを使用してCSVからロードされ、同じ形式で出力されます。

new SimpleDateFormat("dd/mm/yy HH:ss", Locale.ENGLISH); 

これは正しく動作します。

しかし、これらを(Comparatorインターフェイスを実装して)ソートしようとすると、これらは一見米国日付形式(mm/dd/yy)で誤ってソートされます。

public int compare(CSVEntry t, CSVEntry t1) { 
     if (t.date.before(t1.date)) 
      return -1; 
     else if (t.date.after(t1.date)) 
      return 1; 
     else 
      return 0; 
    } 

これは関係なく、私は(Date.after()またはDate.before()またはDate.compareTo)を使用してどの方法にかかわらず、ロケールに設定されているものです。

私が使用してローカルシステムのデフォルトを設定しようとしました:効果なしに

Locale.setDefault(Locale.ENGLISH); 

アイデア?

答えて

1
"dd/mm/yy HH:ss" 

mmは分の時間です。あなたはおそらくMM(年の月)を探しています。

また、HH:ssHH:mmまたはHH:mm:ss

0

t.dateが実際にDateオブジェクトの場合、入力の形式は関係ありません。 Dateオブジェクトのフィールドを比較します。

したがって、テキスト日付をDateオブジェクトにどのように変換したかは、ほぼ確実に問題になります。

そののプロセスをデバッグして、日付が間違って変換されている理由(または原因)を調べる必要があると思います。

開始については、使用されるべき形式は:

dd/MM/yy HH:ss 

hereに示すように)下ケースmが分なくヶ月です。私はあなたのむしろ "奇妙な" HH:ssが分指定子を持っていないのにあなたが望むものと仮定しています。

これもチェックしてください。

関連する問題