python office365 创建会议活动

python office365 create meeting event

我在下面有这个 python 代码来创建会议活动,它正在运行。我计划将此脚本与 Web 表单提交合并,用户在其中输入一些基本信息,例如主题、与会者和会议 date/time,然后 Python 脚本将根据提交的信息创建会议事件网络表格。我没问题完成,但问题是会议的时区。

如您所见,Python 脚本需要 Start/End 时间,因为这个“”2016-08-03T15:00:00-07:00”(-07:00 用于 PDT时间)。然而,Web 表单不知道当前用户的时区(用户可能在西部、山区、中部或东部时区)。弄清楚时区是-7(PDT)、-8 太复杂了(太平洋标准时间), -6(CT)....

有没有办法根据用户登录查询创建会议的人当前的时区设置?然后将该时区转换为数字(PDT 为 -7,PST 为 -8,CT 为 -6...)...因此 "StartTimeZone" 和 "EndTimeZone" 具有正确的时间?

# Set the request parameters
url = 'https://outlook.office365.com/api/v1.0/me/events?$Select=Start,End'
user = 'user1@domain.com'

pwd = getpass.getpass('Please enter your AD password: ')


# Create JSON payload
data = {
  "Subject": "Testing Outlock Event",
  "Body": {
    "ContentType": "HTML",
    "Content": "Test Content"
  },
  "Start": "2016-08-03T15:00:00-07:00",
  "StartTimeZone": "Pacific Standard Time",
  "End": "2016-08-03T16:00:00-07:00",
  "EndTimeZone": "Pacific Standard Time",
      "Attendees": [
    {

      "EmailAddress": {
        "Address": "attendee1@domain.com",
        "Name": "User2"
      },
       "Type": "Required"  },

       {
      "EmailAddress": {
        "Address": "attendee2@domain.com",
        "Name": "User3"
      },
       "Type": "Optional"  }
  ]
}

json_payload = json.dumps(data)

# Build the HTTP request
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request(url, data=json_payload)
auth = base64.encodestring('%s:%s' % (user, pwd)).replace('\n', '')
request.add_header('Authorization', 'Basic %s' % auth)
request.add_header('Content-Type', 'application/json')
request.add_header('Accept', 'application/json')
request.get_method = lambda: 'POST'
# Perform the request
result = opener.open(request)

您可以在客户端使用 JavaScript 获取用户与 UTC 的时区偏移量,然后在提交表单时将此值传递给服务器。请参阅 this 答案。

更新:

假设您的用户区域设置正确,对于当前区域设置 (source),getTimezoneOffset() 时区将从 UTC 偏移 return,以分钟为单位。您不必担心夏令时。使用 UTC 时间作为转换的基础。当你得到偏移量时,使用这个偏移量将用户指定的会议时间转换为UTC,然后将UTC时间转换为服务器上使用的时区。

更新 2:

我意识到实际上你应该关心夏令时,因为 getTimezoneOffset() return 是 当前 偏移量,而用户可以创建事件在未来的某个地方,夏令时之后将更改此偏移量并且转换将变得不准确。所以正确的解决方案不是直接使用当前的 UTC 偏移量,而是使用它来获取您将用于转换的真实时区。 jsTimezoneDetect 图书馆可以为您做这件事。