Intereting Posts

Android – формат времени в ListView с адаптером курсора

Я использую 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, так есть ли лучший способ / любой способ сделать это? Помимо сохранения предварительно отформатированных дат в базе данных до того, как это будет сделано?

Solutions Collecting From Web of "Android – формат времени в ListView с адаптером курсора"

Вам нужно будет создать пользовательский 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)); 

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

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

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

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