Android CalendarView + Календарь

В настоящее время я пытаюсь сделать так, чтобы при выборе дня в CalendarView отображались все события этого дня. У меня возникли проблемы с отображением всех событий за день (похоже, это не работает с 12:00 до 11:59?). Вот что у меня сейчас есть.

calenderView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {

        @Override
        public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
            getEvents(year, month, dayOfMonth);
        }
    });

а также

public void getEvents(int year, int month, int day){
    log.logInfo("getting events from " + String.valueOf(year) + "/" + String.valueOf(month) + "/" + String.valueOf(day));
    String[] projection = new String[] { CalendarContract.Events.CALENDAR_ID, CalendarContract.Events.TITLE, CalendarContract.Events.DESCRIPTION, CalendarContract.Events.DTSTART, CalendarContract.Events.DTEND, CalendarContract.Events.ALL_DAY, CalendarContract.Events.EVENT_LOCATION };
    // 0 = January, 1 = February, ...
    Calendar startTime = Calendar.getInstance();
    startTime.set(year,month,day, 00, 00);
    Calendar endTime= Calendar.getInstance();
    endTime.set(year,month,day, 23, 59);
    // the range is all data from 2014
    String selection = "(( " + CalendarContract.Events.DTSTART + " >= " + startTime.getTimeInMillis() + " ) AND ( " + CalendarContract.Events.DTSTART + " <= " + endTime.getTimeInMillis() + " ))";
    Cursor cursor = this.getBaseContext().getContentResolver().query( CalendarContract.Events.CONTENT_URI, projection, selection, null, null );
    // output the events
    if (cursor.moveToFirst()) {
        do {
            log.logInfo("Title: " + cursor.getString(1));
            log.logInfo("Start-Time: " + (new Date(cursor.getLong(3))).toString());
            log.logInfo("Location: " + cursor.getString(6));
        } while ( cursor.moveToNext());
    }
    log.logInfo("-----------------------");

}

Используя это, если у меня есть event1 с 00:00 до 11:59 и event2 с 12:00 до 23:59, только event2 будет отображаться в списке.


person Galax    schedule 27.07.2015    source источник


Ответы (1)


Вы можете попробовать записать фактическое время в миллисекундах и сравнить. Calendar.getInstance() вы получите Календарь, настроенный на ваш местный часовой пояс, поэтому вы получаете все события, которые начинаются между полуночью и 23:59 по местному времени. Вы уверены, что в базе тоже все по местному времени (а не по UTC, или как-то еще)? Просто предположение.

person Adam Lopresto    schedule 27.07.2015