Android - форматировать временную метку в ListView с помощью адаптера курсора - PullRequest
8 голосов
/ 21 июня 2011

Я использую SimpleCursorAdapter для заполнения Android ListView, и мне было интересно, как мне получить все метки времени, которые я получаю из базы данных, каждая в «DATE_DATE», в удобочитаемые даты, возможно, используя SimpleDateFormat?

Cursor programDateCursor = mDbAdapter.loadProgramDates();

startManagingCursor(programDateCursor);

String[] from = new String[]{ "DATE_DATE" };

int[] to = new int[]{ R.id.text1 };

SimpleCursorAdapter programDates = 
             new SimpleCursorAdapter(this, R.layout.program_date,
                                      programDateCursor, from, to);

setListAdapter(programDates);

Я не очень много работал с Java, так есть ли лучший способ / любой способ сделать это?Если не считать предварительно отформатированные даты в базе данных заранее, то есть?

Ответы [ 3 ]

16 голосов
/ 21 июня 2011

Вам нужно будет создать собственный CursorAdapter, чтобы иметь возможность форматировать ваши метки времени.

public class MyAdapter extends CursorAdapter {
    private final LayoutInflater mInflater;

    public MyAdapter(Context context, Cursor cursor) {
        super(context, cursor, false);
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
         return mInflater.inflate(R.layout.program_date, parent, false);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        long time = cursor.getLong(cursor.getColumnIndex("DATE_DATE")) * 1000L;

        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(time);

        String format = "M/dd h:mm a";
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        String dateString = sdf.format(cal.getTime());

        ((TextView) view.findViewById(R.id.text1)).setText(dateString);
    }
}

Список для изменения String format на ваш вкус: здесь .

Затем вы бы использовали этот адаптер с

Cursor programDateCursor = mDbAdapter.loadProgramDates();
startManagingCursor(programDateCursor);

setListAdapter(new MyAdapter(this, programDateCursor));
0 голосов
/ 12 июля 2015

Мне было проще всего сделать следующее:

SimpleDateFormat oldTime = new SimpleDateFormat("HH:mm:ss");
SimpleDateFormat newTime = new SimpleDateFormat("hh:mm:ss a");

String stringTime;

try {

        String reformattedStr = newTime.format(oldTime.parse(stringTime));
        } catch (ParseException e) {
        e.printStackTrace();
        }
0 голосов
/ 21 июня 2011

Сохранять даты эпохи Unix как INTEGER в базе данных SQLite. Затем в Java инициализируйте их с помощью new Date(value) (или value*1000, я не уверен) и используйте SimpleDateFormat для форматирования дат в адаптере списка.

Я думаю, что это наиболее удобный способ для предоставленной вами ограниченной информации.

...