You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android日历字段日期异常:添加事件时设置与显示日期不符

解决日历事件日期显示不一致的问题

兄弟,我太懂这个坑了!你遇到的日期不一致问题,根源就在Calendar类的月份计数规则上——Android里的Calendar月份是从0开始的!你代码里写的05其实对应的是6月,而不是你想要的5月,这就导致实际显示的日期和预期对不上啦。

另外还要提一句,你原来的代码里只设置了事件标题,没把时间数据传递给Intent,就算月份对了,系统也没法识别你要设置的事件时间哦。给你整理了修正后的完整代码:

eventButton.setOnClickListener(new Button.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
        Calendar time = Calendar.getInstance(); 
        time.clear(); 
        // 敲黑板:Calendar的月份从0开始,04才代表5月!
        time.set(2018, 04, 23); 
        // 将日历时间转为毫秒值,用于传递给Intent
        long startTime = time.getTimeInMillis(); 
        // 可以给事件设置结束时间,比如持续1小时
        time.add(Calendar.HOUR_OF_DAY, 1); 
        long endTime = time.getTimeInMillis(); 

        Intent calendarIntent = new Intent(Intent.ACTION_EDIT); 
        calendarIntent.setType("vnd.android.cursor.item/event"); 
        calendarIntent.putExtra(CalendarContract.Events.TITLE, "Wh..."); 
        // 传递事件的开始和结束时间,这一步必不可少
        calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTime); 
        calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime); 
        // 别忘了启动Intent,不然点击按钮没反应哦
        startActivity(calendarIntent); 
    } 
});

再给你补充几个注意点:

  • 如果你需要指定时区,可以加上这行代码,避免不同时区下的时间偏差:
    calendarIntent.putExtra(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
    
  • Android 6.0(API 23)及以上版本,需要动态申请READ_CALENDAR和WRITE_CALENDAR权限,不然会有权限异常。

内容的提问来源于stack exchange,提问作者UsmanSanawar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:57:35