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

使用Microsoft Graph API添加日历事件:时区设置与起始日期配置问题

搞定Microsoft Graph API日历事件的日期与时区设置问题

嘿,我帮你梳理下如何正确设置日历事件的起始日期和时区,完美适配Microsoft Graph API的要求!

1. 先把Start/End类补全

你的Start和End类必须包含两个核心属性:dateTime(ISO 8601格式的时间字符串)和timeZone(时区标识)。直接给你正确的类定义:

// 可以复用这个类作为Start和End的类型,或者分别命名为Start/End
public class DateTimeDetails
{
    public string dateTime { get; set; }
    public string timeZone { get; set; }
}

注意哦,属性名要和Graph API的JSON字段完全匹配(小写开头),如果你的项目用的是System.Text.Json或者Newtonsoft.Json,记得确保序列化时字段名正确映射——如果习惯用PascalCase命名属性,可以加特性指定JSON字段名,比如[JsonPropertyName("dateTime")]。

2. 正确生成日期时间与时区值

Graph API对dateTime的格式要求很严格,必须是ISO 8601格式(比如"2024-05-20T14:30:00"),而timeZone建议用IANA时区标识符(比如"Asia/Shanghai"),当然Windows时区标识(比如"China Standard Time")也支持,但IANA的兼容性更好。

给你个实际使用的例子:

// 比如创建明天下午2点半开始的会议
var meetingStart = new DateTimeDetails
{
    dateTime = DateTime.Now.AddDays(1).ToString("yyyy-MM-ddTHH:mm:ss"),
    timeZone = "Asia/Shanghai"
};

// 会议持续1小时,设置结束时间
var meetingEnd = new DateTimeDetails
{
    dateTime = DateTime.Now.AddDays(1).AddHours(1).ToString("yyyy-MM-ddTHH:mm:ss"),
    timeZone = "Asia/Shanghai"
};

如果你的应用需要适配用户的默认时区,可以先调用GET /me/mailboxSettings接口获取用户的时区配置,再动态设置这里的timeZone值。

3. 完整的Event对象示例

把这些整合起来,一个可以直接用来提交的Event实例大概是这样的:

var newCalendarEvent = new Event
{
    subject = "Q3项目启动会",
    body = new Body
    {
        contentType = "HTML", // 可选"Text",纯文本格式
        content = "<p>讨论Q3项目目标、分工和时间节点</p>"
    },
    start = meetingStart,
    end = meetingEnd,
    location = new Location
    {
        displayName = "总部3楼大会议室"
    },
    attendees = new List<Attendee>
    {
        new Attendee
        {
            emailAddress = new EmailAddress { address = "john.doe@company.com", name = "John Doe" },
            type = "required" // 必填参会者,可选"optional"(可选)或"resource"(资源,比如会议室)
        },
        new Attendee
        {
            emailAddress = new EmailAddress { address = "jane.smith@company.com", name = "Jane Smith" },
            type = "required"
        }
    }
};

4. 序列化的小细节

如果你的.NET项目用System.Text.Json序列化对象,记得给属性加上JsonPropertyName特性来确保字段名正确:

using System.Text.Json.Serialization;

public class DateTimeDetails
{
    [JsonPropertyName("dateTime")]
    public string DateTimeValue { get; set; }

    [JsonPropertyName("timeZone")]
    public string TimeZoneValue { get; set; }
}

这样序列化后的JSON就完全符合Graph API的要求了,不会因为字段名不匹配导致请求失败。

5. 调用API的关键提醒

发送POST请求到https://graph.microsoft.com/v1.0/me/events时,一定要在请求头里加上Content-Type: application/json,然后把序列化后的Event对象作为请求体发送就行啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:59