Правильная дата форматирования

Привет, stackoverflowers , допустим, у меня есть база данных с строкой, заполненной датами, ладно?

Задача 1:

Как этот :

2013-06-01

Поэтому я хочу перевести эту дату в String

Входные данные :

Вт Мар 01 00:00:00 EET 2013

В качестве примера .. Итак, как я могу сделать вывод даты следующим образом:

Мар 2013 г. Вот мои коды:

 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); } 

Однако теперь результаты все замешаны и потеряны! Gridview большой, и я вижу только:

Сентябрь 2013 Июнь 2013 Июль 2013

В каждой строке. Что я могу сделать ? благодаря

Вам нужно построить компаратор для сравнения двух дат:

Вот код для него:

 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); 

Итак, после 1 дня contuniously работы над исправлением, я выяснил, что проблема возникла из GridViewStickyHeaders – внешней библиотеки.

Проблема возникает после прокрутки! Результаты все запутались.

Спасибо за ваш вклад! Ваша помощь действительно помогла мне! Спасибо =)

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