我的应用程序的用户输入计划提供的事件
我想将日期和时间转换为UTC。我的应用程序基于GAE(Python),因此诸如timezonefinder或pytzwhere之类的工具无法正常工作(GAE运行时不支持模块的依赖项)。
使用在线API是一种解决方案。到目前为止,我检查了Google时区API。您为其提供地理位置,它将返回时区信息。但是,要处理DST,您还必须为其提供时间戳。 奇怪的是,您必须提供UTC时间戳作为输入,而这正是我想要的输出!
我可以根据本地日期时间信息为其提供时间戳(因此无需进行时区校正),它将返回我需要将本地日期时间转换为UTC的rawOffset和dstOffset,但是在某些情况下,日期时间可能不正确我估计是DST过渡期间的时间段([-12h,+ 12小时],这取决于实际的偏移量),因为我没有提供正确的UTC时间戳。
是否存在一种明显的(在线)方法,可以根据地理位置将本地日期时间转换为UTC日期时间?
获得某种精度的一种方法是应用从API接收到的rawOffset和dstOffset,再次生成UTC时间戳,并再次使用该时间戳调用API。现在,夏令时过境期间我的结果可能会不正确,现在应该限制为+/- 1小时。但是,考虑到API的配额,这对我的印象来说是最重要的。
答案 0 :(得分:3)
为了根据地理位置将本地日期时间信息转换为UTC,您可以将任意时间戳传递给Google Time Zone API,其主要目的是检索位置的timeZoneId
。
示例请求:
https://maps.googleapis.com/maps/api/timezone/json?location=39.6034810,-119.6822510×tamp=0&key=YOUR_API_KEY
示例响应:
{
"dstOffset" : 0,
"rawOffset" : -28800,
"status" : "OK",
"timeZoneId" : "America/Los_Angeles",
"timeZoneName" : "Pacific Standard Time"
}
然后,您可以使用timeZoneId
和用户输入的日期和时间信息以及pytz
在本地时间创建python datetime对象,并获得我认为您要查找的UTC时间戳。该方法将根据用户输入的日期处理夏令时。例如:
from datetime import datetime
from pytz import timezone, utc
pacific = timezone('America/Los_Angeles')
pdt = pacific.localize(datetime(2018, 5, 1, 8, 0, 0))
pst = pacific.localize(datetime(2018, 12, 1, 8, 0, 0))
pdt_utc = pdt.astimezone(utc)
pst_utc = pst.astimezone(utc)
# Pacific Daylight Time
print(pdt)
# 2018-05-01 08:00:00-07:00
# Pacific Standard Time
print(pst)
# 2018-12-01 08:00:00-08:00
# UTC
print(pdt_utc)
# 2018-05-01 15:00:00+00:00
print(pst_utc)
# 2018-12-01 16:00:00+00:00
重要提示:我没有使用timeZoneId
的API的所有可能返回值对它进行测试,以确保pytz
正确地解释了API返回的内容(它与示例时区“ America / Los_Angeles”,但您需要进行测试以确保它是您所处理的地理位置的可靠解决方案)。
答案 1 :(得分:0)
在您的网页中,您可以使用JavaScript函数getTimezoneOffset
计算用户本地时间与UTC时间之间的时差:
['T1', 'T2', 'V', 'T4', 'T5', 'V', 'V', 'T8', 'T9', 'T10', 'V', 'T12', 'T13', 'V', 'V', 'T16', 'T17', 'T18', 'V', 'T20']
方法返回时区差,以 分钟,从当前语言环境(主机系统设置)到UTC。
然后,您可以向所有需要时区偏移的URL添加参数。另一个解决方案是将其放入Cookie。
从服务器端,您可以检索时区偏移量以计算UTC日期/时间。