Как я могу заставить SQLite правильно сортировать по дате, используя формат ГГГГ-ММ-ДД? - PullRequest
2 голосов
/ 24 августа 2010

Я создаю приложение, которое должно сортировать таблицу Sqlite по неделям по дате и отображать только дату и общее количество часов, отработанных за эту неделю, в виде списка.

Моя деятельность расширяет представление списка и использует SimpleCursorAdapter для заполнения списка. Мой столбец даты - это текстовое поле, отформатированное как «ГГГГ-ММ-ДД»

Вот моя функция запроса к базе данных, я основываю свой класс помощника базы данных на примере Google Notepad.

public Cursor getAllWeeks()
    {
        Cursor mCursor = mDb.query(true, DATABASE_TABLE, null, null, null, null, null, "weekdate ASC", null);


        if (mCursor != null)
        {
            mCursor.moveToFirst();
        }

        return mCursor;
    }

И я подключаю его к ListView так:

public class WeekList extends ListActivity implements OnClickListener{
    final static int DELETE_ID = Menu.FIRST + 1;

    public static NotesDbAdapter DBadapter;
    public static Cursor ListCursor;

    static final String[] displaycolumns = {"weekdate", "weektotalhours"};
    static final int[] listitemviews = {R.id.TextViewListItem1, R.id.TextViewListItem2};

    @Override
    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.weeklist);
        Log.i("bendebug", "logtest");

        DBadapter = new NotesDbAdapter(this);
        DBadapter.open();
        ListCursor = DBadapter.getAllWeeks();


        this.setListAdapter(new SimpleCursorAdapter(this, R.layout.listitemlayouts, ListCursor, 
                displaycolumns, listitemviews));
        findViewById(R.id.ButtonAddWeek).setOnClickListener(this);

        //Activate the context menu
        registerForContextMenu(getListView());

    }

Проблема, с которой я сталкиваюсь, заключается в том, что мой курсор, кажется, не отсортирован должным образом, мой недельный список выглядит следующим образом:

2010-7-19
2010-7-23
2010-7-24
2010-7-6

Вместо правильной сортировки. Я, вероятно, упускаю что-то действительно очевидное, так как я полный нуб, пытающийся учить себя.

Очевидно, что я сократил код, чтобы сделать его более читабельным, поскольку остальная часть действия не имеет отношения к AFAIK, но я был бы рад опубликовать полный код действия по запросу, в любом случае, он действительно прост.

Ответы [ 3 ]

6 голосов
/ 24 августа 2010

Используйте начальные нули для месяца и дня.

4 голосов
/ 24 августа 2010

SQLite не имеет встроенных полей даты;Вы должны использовать TEXT (текстовое представление), INTEGER (время Unix) или REAL.См .: Типы данных в SQLite .

Вы можете использовать начальные нули (как предложил Дан) или, что еще лучше, сохранить их как метки времени UNIX в INTEGER полях.Вы можете преобразовать их обратно в удобочитаемые даты, используя функции даты и времени SQLite или Java (или все, что вы используете).

0 голосов
/ 25 августа 2010

Мне пришлось сделать подобную сортировку. Я закончил тем, что сохранил даты как РЕАЛЬНЫЕ значения в SQLite как количество миллисекунд с начала января 1 января 00:00 по Гринвичу. Затем вы можете просто отсортировать их численно (большее число произошло позже в хронологическом порядке). Затем вы можете конвертировать в строки, используя SimpleDateFormat. Также позволяет делать великие дела с элементами времени, что помогает ... http://developer.android.com/reference/java/text/SimpleDateFormat.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...