Calendar中的Outlook API时差

时间:2017-10-19 13:18:33

标签: node.js microsoft-graph outlook-restapi

我在使用Outlook API专门使用Calendar API时遇到了问题。

我以UTC格式发送日期,当它们添加到日历中时,我与发送日期有所不同。

我在法国,所以原始日期是UTC + 2。我转换为UTC并使用此配置发出请求:

var options = {
            url: "https://outlook.office.com/api/v2.0/me/calendars/" + workspace.calendarId + "/events?$Select=Id",
            method: "POST",
            headers: {
                "authorization": "Bearer " + host.outlookCalAccessToken,
                "accept" : "application/json",
                "ContentType" : "application/json"
            },
            json:{
                "Subject" : event.summary,
                "Body" : {
                    "ContentType" : "Text",
                    "Content" : event.description
                },
                "Start" : {
                    "DateTime":start,
                    "TimeZone" : "OriginStartTimeZone"
                },
                "End" : {
                    "DateTime":end,
                    "TimeZone" : "OriginStartTimeZone"

                },
                "Attendees" : [
                    {
                        "EmailAddress" : {
                            "Name" : nomad.firstname,
                            "Address" : nomad.email
                        },
                        "Type" : "Required"
                    }
                ]

            },
            "Content-Type" : "application/json"
        };

如果TimeZone是" OriginStartTimeZone"我有同样的问题。或" UTC"。

例如,我的本地日期为2017-10-19T17:00:00.000 它被转换为UTC 2017-10-19T15:00:00.000Z 在日历中,活动日期为2017-10-19T08:00:00.000

我对这个API错过了什么?

谢谢!

3 个答案:

答案 0 :(得分:3)

OriginStartTimeZone不是TimeZone的有效值。如果您将TimeZone设置为UTC,则应获得预期结果。我刚用这个有效载荷测试了它:

{
    "Subject" : "test",
    "Body" : {
        "ContentType" : "Text",
        "Content" : "hello"
    },
    "Start" : {
        "DateTime": "2017-10-19T15:00:00.000Z",
        "TimeZone" : "UTC"
    },
    "End" : {
        "DateTime": "2017-10-19T16:00:00.000Z",
        "TimeZone" : "UTC"
    }
}

在我的POST响应和随后的事件GET请求中,我都回来了:

"Start": {
    "DateTime": "2017-10-19T15:00:00.0000000",
    "TimeZone": "UTC"
},
"End": {
    "DateTime": "2017-10-19T16:00:00.0000000",
    "TimeZone": "UTC"
},

答案 1 :(得分:2)

如果您希望活动开始日期为当地时间10:30的2017-10-19,您的起始对象应如下所示:

Start:{DateTime: "2017-10-19T10:30:00+02:00", TimeZone: "UTC"}

这是你的起始对象的样子吗?如果是,则应在日历中正确显示事件时间。

答案 2 :(得分:0)

将时区更改为UTC后,问题仍然存在。我发现它不起作用。在网络邮件中,时区设置为UTC-8,虽然我在注册时填写了正确的时区... 谢谢你的回答!