0

友達私は日付レコードを含む文字列を持っています

String date=10-Oct-2012 @12-Oct-2012 @$12-Oct-2012 @12-Oct-2012 @$12-Sept-2012 13:50@12-Oct-2012 13:50@$12-Feb-2012 13:50@12-Oct-2012 13:50@$

List<Date> myList=new ArrayList<Date>() ;

日付を比較する必要があります。10-Oct-2012,12-OCt-2012,12-Sept-2012,12-Feb-2012つまり、時系列に並べられるようにすべての奇数の日付を比較する必要があります。この実装について混乱しています。問題を解決するためのガイダンス/ヒントを提供してください。

この場合、時系列順の後の解決策は次のようになります。12-Feb-2012 @12-Oct-2012 @12-Sept-2012 @12-Oct-2012 @$10-Oct-2012 @12-Oct-2012 @$12-Oct-2012 @12-Oct-2012

友達、問題を解決するために、最初の日付をキーとして保存し、文字列全体を値として保存することを計画しているハッシュマップを作成しました。

String[] tokens=date.split("\\$");
    demo[0]=demo[0].replaceAll("-", ".");
if(tokens.length>0)
        {
            for(int iTmp=tokens.length-1;iTmp>=0;iTmp--)
            {
                String []demo = tokens[iTmp].split("\\@");
                    demo[0] = demo[0].replace("Jan", "1")
                    .replace("Feb", "2").replace("March","3").replace("April","4").replace("May","5").replace("Jun","6").replace("July","7").replace("Aug","8")
                    .replace("Sept","9").replace("Oct","10").replace("Nov","11").replace("Dec","12");
                    demo[0]=demo[0]+" 00:05:00";
                    Date date1 = null;
                    SimpleDateFormat formatter = new SimpleDateFormat("dd.MM.yy");


                    try {
                        date1 = (Date)formatter.parse(demo[0]);

                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    myList.add(date1);
                    System.out.println("ADDED DATE IS"+date1);
                    //System.out.println("KEY VALUE PAIRS  "+key+"  "+tokens[iTmp]);
                }
            }
            System.out.println("READING LISTs");
            for(int iTmp=0;iTmp<myList.size();iTmp++)
            {

                System.out.println(myList.get(iTmp));
            }
            Collections.sort(myList);
            System.out.println("After Sorting");
            for(int iTmp=0;iTmp<myList.size();iTmp++)
            {

                System.out.println(myList.get(iTmp));
                System.out.println();
            } 
4

3 に答える 3

3

それは私にはかなり単純に聞こえます:

  • 各値をより適切なタイプに解析します(Calendar、、DateJoda Time's LocalDate
  • 自然な順序で並べ替える

(IMOではJoda Timeを使用することをお勧めします。これは、「単なる日付」を表すCalendarものでも、実際に表すものでもないためです。すべての値を同じタイムゾーンに入れる必要があります。)Date

それらを文字列として比較することは絶対にお勧めしません。いつものように、データをできるだけ早く表現しようとしている情報に最も適切なタイプに変換し、できるだけ遅くシリアル化表現(たとえば、ストレージ、Webサービスへの伝播など)に変換します。

于 2012-10-12T09:35:59.170 に答える
0

文字列を分割してから

グレゴリオ暦(組み込み)を使用できます

または、ヨーダタイムライブラリを使用できます

ソートについてはこれ以上言えませんが

于 2012-10-12T09:35:24.247 に答える
0

Android用に開発している場合(質問にAndroidタグがあります)、AndroidSDKの時間構造とメソッドについて知っておく必要があります。

可能であれば、RFC 3339形式(Androidが組み込みメソッドでサポートしている)のように、それ自体が自然にソートできる日付/タイムスタンプの文字列表現を使用するようにしてください。これにより、文字列のタイムスタンプをより簡単に操作できるようになり、必要に応じて正規型または整数型の形式に変換する簡単な方法も提供されます。

于 2012-10-12T09:49:19.773 に答える