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

C#使用Google.Apis.Calendar.v3创建下月工作日30分钟会议报错如何解决

问题排查与修正方案

核心问题点

  • 重复规则频率配置错误:使用FREQ=MONTHLY不符合每周工作日重复的需求,应该使用FREQ=WEEKLY,MONTHLY频率下的BYDAY参数匹配逻辑为每月的指定周几,无法实现连续每周工作日的重复效果。
  • 单日程时长配置错误:事件的End属性错误设置为下个月最后一天,导致单日程时长变成整月,正确配置应为单次日程开始时间加30分钟,重复逻辑由RRULE规则控制。
  • 时间格式与时区不规范:UNTIL参数要求使用UTC时间格式,原代码直接使用本地时间转换的字符串,容易出现时区偏移导致的规则生效范围错误。
  • 变量冗余:代码中存在未使用的冗余变量(如lastDayofMonthString、定义后未调用的start/end变量),可能引发逻辑混淆。

修正后完整实现代码

public async Task<ActionResult> NewEvent()
{
    var credential = await GetCredentialForApiAsync();

    var initializer = new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "ASP.NET MVC5 Calendar Sample",
    };

    var service = new CalendarService(initializer);
    var today = DateTime.Now;
    // 计算下个月第一天,可按需调整日程固定开始时间,示例为每天9点
    var nextMonthFirstDay = new DateTime(today.Year, today.Month, 1).AddMonths(1).AddHours(9);
    // 计算下个月最后一天
    var nextMonthLastDay = new DateTime(nextMonthFirstDay.Year, nextMonthFirstDay.Month, DateTime.DaysInMonth(nextMonthFirstDay.Year, nextMonthFirstDay.Month));
    // UNTIL参数要求使用UTC时间格式
    var untilUtcString = nextMonthLastDay.ToUniversalTime().ToString("yyyyMMdd'T'HHmmss'Z'");

    Event newEvent = new Event()
    {
        Summary = " Dealer Meeting",
        Location = "1600 Amphitheatre Parkway., Mountain View, CA 94043",
        Description = "A chance to learn more about Google APIs.",
     
        Start = new EventDateTime()
        {
            DateTime = nextMonthFirstDay,
            TimeZone = "Asia/Kolkata",
        },
        End = new EventDateTime()
        {
            // 单日程固定30分钟时长
            DateTime = nextMonthFirstDay.AddMinutes(30),
            TimeZone = "Asia/Kolkata",
        },

        // 修正后重复规则:每周重复,匹配周一到周五,到下个月最后一天截止
        Recurrence = new String[] { $"RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;UNTIL={untilUtcString}" },
        Attendees = new EventAttendee[] {
            new EventAttendee() { Email = "test@test.com" },
        },
        Reminders = new Event.RemindersData()
        {
            UseDefault = false,
            Overrides = new EventReminder[] {
                new EventReminder() { Method = "email", Minutes = 24 * 60 },
                new EventReminder() { Method = "sms", Minutes = 10 },
            }
        }
    };

    String calendarId = "primary";
    EventsResource.InsertRequest request = service.Events.Insert(newEvent, calendarId);
    Event createdEvent = request.Execute();
    return View();
}

关键修改说明

  • 将重复规则频率改为WEEKLY,配合BYDAY=MO,TU,WE,TH,FR实现每周工作日重复。
  • 单次日程结束时间调整为开始时间加30分钟,符合时长要求。
  • 统一了日期计算逻辑,UNTIL参数转换为UTC时间格式,避免时区偏移导致的规则异常。
  • 移除了冗余变量,简化逻辑减少出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:36:08