4

こんにちはstackoverflowers、日付で満たされた行を持つデータベースがあるとしましょう。

問題 1:

このように :

2013-06-01

だから私はこの日付を文字列に変換したい

入力:

火曜日 Mar 01 00:00:00 EET 2013

例として..では、どのように日付の出力を次のように変えることができますか:

2013年3月?? これが私のコードです:

date = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
                            .parse(mCursor.getString(mCursor
                                    .getColumnIndex(KEY_AVAILABILITYDATE)));
                    list.add(date);

問題2(最初に問題1を解決する必要があると思います):

もちろん、日付を追加したリストを並べ替えたいです。

だから私はこのコードを実行します:

Collections.sort(list);

しかし、率直に言って、正しくソートされません! それはまちまちです - 日付はすべて間違っています。

読んでくれてありがとう、簡単だといいのですが!

すべてのコード:

public ArrayList<Date> GetValues() {
ArrayList<Date> list = new ArrayList<Date>();
        Date date;
if (mCursor.moveToFirst()) {
            while (mCursor.isAfterLast() == false) {
                try {
                    date = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH)
                            .parse(mCursor.getString(mCursor
                                    .getColumnIndex(KEY_AVAILABILITYDATE)));
                    list.add(date);

                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                mCursor.moveToNext();
            }

        }

        Collections.sort(list);

        return list;

    }

いくつかの希望を失った後、すべてのコードを表示することにしました。

コード:

    Database DbHelper = new Database(
                    this.getSherlockActivity()).open();
            ArrayList<Date> headers = DbHelper.GetValues();

            HashSet<Date> hs = new HashSet<Date>();
            hs.addAll(headers);
            headers.clear();
            headers.addAll(hs);
                    Collections.sort(header,dateComparator);
            Collections.reverse(headers);

私はサードパーティのライブラリを使用しています: StickyGridHeadersGridViewなので、ここに私のアダプターがあります:

@Override
public int getCountForHeader(int header) {
    // TODO Auto-generated method stub
    return 1;
}

    @Override
    public int getNumHeaders() {
        // TODO Auto-generated method stub
        return headers.size();
    }

    @Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.header, parent, false);
        TextView tvheader = (TextView) convertView
                .findViewById(R.id.tvheader);
        String headertitle = headers.get(position).toString();
        if (headertitle.contains("01 00:00:00 EET")) {
            headertitle = headertitle.replace("01 00:00:00 EET", "");
        }
        if (headertitle.contains("01 00:00:00 EEST")) {
            headertitle = headertitle.replace("01 00:00:00 EEST", "");
        }
        if (headertitle.contains("02 00:00:00 EET")) {
            headertitle = headertitle.replace("02 00:00:00 EET", "");
        }
        if (headertitle.contains("02 00:00:00 EEST")) {
            headertitle = headertitle.replace("02 00:00:00 EEST", "");
        }
        if (headertitle.contains("15 00:00:00 EET")) {
            headertitle = headertitle.replace("15 00:00:00 EET", "");
        }
        // days
        if (headertitle.contains("Mon")) {
            headertitle = headertitle.replace("Mon", "");
        }
        if (headertitle.contains("Tue")) {
            headertitle = headertitle.replace("Tue", "");
        }
        if (headertitle.contains("Wed")) {
            headertitle = headertitle.replace("Wed", "");
        }
        if (headertitle.contains("Thu")) {
            headertitle = headertitle.replace("Thu", "");
        }
        if (headertitle.contains("Fri")) {
            headertitle = headertitle.replace("Fri", "");
        }
        if (headertitle.contains("Sat")) {
            headertitle = headertitle.replace("Sat", "");
        }
        if (headertitle.contains("Sun")) {
            headertitle = headertitle.replace("Sun", "");
        }

        // months
        if (headertitle.contains("Jan")) {
            headertitle = headertitle.replace("Jan", "January");
        }
        if (headertitle.contains("Feb")) {
            headertitle = headertitle.replace("Feb", "February");
        }
        if (headertitle.contains("Mar")) {
            headertitle = headertitle.replace("Mar", "March");
        }
        if (headertitle.contains("Apr")) {
            headertitle = headertitle.replace("Apr", "April");
        }
        if (headertitle.contains("Jun")) {
            headertitle = headertitle.replace("Jun", "June");
        }
        if (headertitle.contains("Jul")) {
            headertitle = headertitle.replace("Jul", "July");
        }
        if (headertitle.contains("Aug")) {
            headertitle = headertitle.replace("Aug", "August");
        }
        if (headertitle.contains("Sep")) {
            headertitle = headertitle.replace("Sep", "September");
        }
        if (headertitle.contains("Oct")) {
            headertitle = headertitle.replace("Oct", "October");
        }
        if (headertitle.contains("Nov")) {
            headertitle = headertitle.replace("Nov", "November");
        }
        if (headertitle.contains("Dec")) {
            headertitle = headertitle.replace("Dec", "December");
        }
        tvheader.setText(headertitle);

    }

しかし今、結果はすべて混乱して失われています!グリッドビューは大きく、私は見るだけです:

2013年9月 2013年6月 2013年7月

各行で。私に何ができる ?ありがとう

4

3 に答える 3

2

2 つの日付を比較するには、コンパレータを作成する必要があります。

ここにコードがあります:

public static Comparator<Date> dateComparator = new Comparator<Date>()
{
    public int compare(Date date1, Date date2)
    {
        return date1.compareTo(date2);
    }
};

次のコード行を使用して呼び出すことができます。

Collections.sort(list,dateComparator);

これは、コレクションの代わりに配列を使用する方法です

Date[] arrayDates = new Date[list.size()];
arrayDates = list.toArray(arrayDates);
Arrays.sort(arrayDates, dateComparator);
于 2013-09-13T21:27:41.043 に答える
1

そのため、修正に1日contuniously取り組んだ後、問題がGridViewStickyHeaders外部ライブラリから発生したことがわかりました。

スクロールすると問題が発生します。結果はすべて台無しになります。

貢献していただきありがとうございます。あなたの助けは本当に私を助けました!ありがとう =)

于 2013-09-14T17:50:59.647 に答える
0

1)"MMM yyyy"次のように、正規表現として使用します。

public class Main {
  public static void main(String args[]) {
    Date now = new Date();
    SimpleDateFormat format = new SimpleDateFormat("MMM yyyy", Locale.ENGLISH);
    System.out.println(format.format(now));
  }
}

> Sep 2013

2)デフォルトで日付のリストを時系列でソートする必要があるため、コンパレータを使用するcompareTo()必要はありません。Collections.sort(list)

ほとんどの場合、問題は表示されていないコードのどこかにありますが、データベースをモックしていないため、Eclipse でコードを実行できないため、確信が持てません。

ソース: http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html

于 2013-09-13T22:21:29.197 に答える