Android日历视图+日历

Android日历视图+日历,android,android-calendar,calendarview,Android,Android Calendar,Calendarview,我目前正在尝试这样做,当我在日历视图中选择一天时,该天的所有事件都会列出。我很难让它显示一天中的所有事件,看起来它在上午12点到11点59分不起作用?。这里是我目前拥有的 calenderView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() { @Override public void onSelectedDayChange(CalendarView view, int yea

我目前正在尝试这样做,当我在日历视图中选择一天时,该天的所有事件都会列出。我很难让它显示一天中的所有事件,看起来它在上午12点到11点59分不起作用?。这里是我目前拥有的

calenderView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {

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


如果我有12am-11:59am的事件1和12pm-11:59pm的事件2,则只会列出事件2。

您可以尝试以毫秒为单位记录实际时间并进行比较。Calendar.getInstance将为您的本地时区设置日历,因此您将获得从午夜到当地时间23:59之间开始的所有事件。您确定数据库也都在本地时间,而不是UTC或其他时间吗?只是一个猜测。

您可以尝试以毫秒为单位记录实际时间并进行比较。Calendar.getInstance将为您的本地时区设置日历,因此您将获得从午夜到当地时间23:59之间开始的所有事件。您确定数据库也都在本地时间,而不是UTC或其他时间吗?只是猜测而已

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

}