我在下面有这个python代码来创建一个会议事件,它正在运行。我计划将此脚本与Web表单子目录结合使用,用户可以在其中输入主题,与会者和会议日期/时间等基本信息,然后Python脚本将根据Web表单中提交的信息创建会议事件。我没有问题要完成,但问题是会议的时区。
正如您所看到的,Python脚本需要开始/结束时间为“2016-08-03T15:00:00-07:00”(-07:00是PDT时间)。但是,Web表单不知道当前用户的时区(用户可能在西部,山区,中部或东部时区)。要弄清楚时区是-7(PDT),-8(PST),-6(CT)太复杂了)......
有没有办法根据用户登录查询创建会议的人的当前时区设置?然后将该时区转换为数字(PDT为-7,PST为-8,-6 CT ......)...所以“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)
答案 0 :(得分:1)
您可以在客户端上使用JavaScript获取用户的UTC时区偏移量,然后在表单提交期间将此值传递给服务器。请参阅this回答。
更新:
假设您的用户的区域设置已正确设置,getTimezoneOffset()
将返回当前区域设置(source)与UTC的时区偏移(以分钟为单位)。你不必担心夏令时。使用UTC时间作为转换的基础。获得偏移量后,使用此偏移量将用户指定的会议时间转换为UTC,然后将UTC时间转换为服务器上使用的时区。
更新2:
我意识到事实上你应该关心夏令时,因为getTimezoneOffset()
会返回当前偏移量,而用户可以在夏令时之后的某个地方创建事件将更改此偏移量,转换将变得不准确。因此,正确的解决方案不是直接使用当前的UTC偏移量,而是使用它来获取您将用于转换的实际时区。 jsTimezoneDetect库可以为您完成此操作。