在不同时区使用Outlook 365 API设置全天日历事件

在不同时区使用Outlook 365 API设置全天日历事件,outlook,office365,outlook-restapi,Outlook,Office365,Outlook Restapi,我正在尝试使用Outlook 365 API创建一天、全天的活动。为此,我以UTC格式指定开始和结束时间,然后指示StartTimeZone和EndTimeZone,如下所述: { 开始:“2015-07-14T23:00:00.000Z”, 完:“2015-07-15T23:00:00.000Z”, StartTimeZone:“中非西部标准时间”, 结束时区:“中非西部标准时间”, ShowAs:'免费', 是的, 正文:{ ContentType:'HTML', 内容:“” }, 主题:“

我正在尝试使用Outlook 365 API创建一天、全天的活动。为此,我以UTC格式指定开始和结束时间,然后指示StartTimeZone和EndTimeZone,如下所述:

{
开始:“2015-07-14T23:00:00.000Z”,
完:“2015-07-15T23:00:00.000Z”,
StartTimeZone:“中非西部标准时间”,
结束时区:“中非西部标准时间”,
ShowAs:'免费',
是的,
正文:{
ContentType:'HTML',
内容:“”
},
主题:“测试74”
}
现在,我的问题是:

  • 使用字符串定义时区既不方便又不一致。伦敦在冬季使用GMT,但在夏季使用GMT+1。因此,我必须在夏季使用“中非西部标准时间”让API接受我的请求,这令人困惑。仅使用此格式定义时间,不提及时区:2015-07-14T00:00:00+/-XX:00来描述午夜,7月14日的开始在时间为GMT+/-XX:00的区域对我来说是明确和理想的,但API拒绝使用此日期格式,选项为AllDay:true,说明全天活动应在午夜开始和结束(如果未给出StartTimeZone和EndTimeZone)

  • 某些时区根本无法使用中给出的GMT偏移量,即使时间和时区对应。这些区域根本无法使用GMT偏移量:阿拉斯加标准时间、太平洋标准时间、大西洋中部标准时间。下面是一个失败的查询示例(“大西洋中部标准时间”,GMT偏移量为-2):

    { 开始:“2015-07-15T02:00:00.000Z”, 完:“2015-07-16T02:00:00.000Z”, StartTimeZone:“大西洋中部标准时间”, 结束时区:“大西洋中部标准时间”, ShowAs:'免费', 是的, 正文:{ ContentType:'HTML', 内容:“” }, 主题:“测试75” } 它的GMT偏移量为-1(开始时间:2015-07-15T01:00:00.000)。我如何在GMT-2中为我的用户服务

  • 相同的GMT偏移量可以由文档中的多个字符串来描述。例如,“山区标准时间”和“美国山区标准时间”都描述GMT-07:00,但只有我对“美国山区标准时间”的查询有效。某些时间偏移最多可以有5个不同的字符串!(如GMT+01:00)选择哪一个

目前,我正在根据GMT偏移量选择一个有效的时区字符串(如果存在的话!)。如果我将时钟设置为伦敦当前时间,则开始时区和结束时区将使用“中非西部标准时间”


有没有办法不使用这些字符串?或者有人能告诉我如何正确选择它们吗?我完全沉浸在日期翻译中了!:)

该活动将在何处使用?使用该本地时区。

正确处理全天事件确实需要知道用户的时区。不幸的是,如果您在一个随机时区中创建它,并且用户邮件客户端(Outlook、OWA等)使用另一个,那么该事件将显示多天(因为开始和结束从午夜开始移动)

因此,您在这里真正应该做的是设置用户时区中午夜的开始和结束时间:

{
  "Start": "2015-07-17T00:00:00-04:00",
  "End": "2015-07-18T00:00:00-04:00",
  "StartTimeZone": "Eastern Standard Time",
  "EndTimeZone": "Eastern Standard Time",
  "IsAllDay": "true",
  "ShowAs": "Free",
  "Body": {
    "ContentType": "Text",
    "Content": "Test"
  },
  "Subject": "TZ AllDay Test"
}

嗨,Dmitry,我们正在使用应用程序中的RESTAPI,它可以在浏览器中工作。我们的应用程序可能会在世界任何地方使用,因此我们必须支持任何位置,或尽可能多的位置。如何从浏览器中获取与API兼容的本地时区?现在我正在调用javascript Date对象的getTimeZoneOffset方法,并在工作的对象中关联一个随机时区,但这很弱,因为将时区关联到偏移量的函数是满射的…我认为在javascript中无法做到这一点-Hi Dmitry,这是非常不幸的。所以,没有办法不使用那些令人困惑的字符串吗?嗨,杰森,谢谢你的回答。你所建议的正是我所做的,如果我没有弄错的话,你的时间格式只是不同,但它产生了完全相同的结果。我所做的是调用getTimeZoneOffset并选择一个与此偏移匹配的时区(因此,我没有选择随机时区),但这看起来并不太好。事实上,微软有一个令人困惑的文件,当他们写道伦敦生活在格林尼治标准时间,这只是一年中真实的一部分,现在它生活在西非标准时间,这是真实的,但有点愚蠢。。。
{
  "Start": "2015-07-17T00:00:00-04:00",
  "End": "2015-07-18T00:00:00-04:00",
  "StartTimeZone": "Eastern Standard Time",
  "EndTimeZone": "Eastern Standard Time",
  "IsAllDay": "true",
  "ShowAs": "Free",
  "Body": {
    "ContentType": "Text",
    "Content": "Test"
  },
  "Subject": "TZ AllDay Test"
}