Google App Engine, parsedatetime and TimeZones
我正在开发一个 Google App Engine / Django 应用,但遇到了以下问题:
在我的 html 中,我输入了时间。输入是自由文本——用户输入"1 小时内"或"明天上午 11 点"。然后将文本发送到 AJAX 中的服务器,该服务器使用以下 python 库对其进行解析:http://code.google.com/p/parsedatetime/。解析后,服务器返回时间的纪元时间戳。
这就是问题所在 - Google App Engine 始终在 UTC 上运行。因此,假设当地时间现在是上午 11 点,UTC 时间是凌晨 2 点。当我将"now"发送到服务器时,它将返回"2am",这很好,因为我希望以 UTC 时间接收日期。当我发送"1 小时内"时,服务器将再次返回"凌晨 3 点",这很好。但是,当我发送"中午"时,服务器将返回"中午 12 点",因为它认为我在谈论中午 UTC - 但实际上我需要它返回凌晨 3 点,这对于请求发送者来说是中午。我可以继续发送请求的浏览器的 TZ,但这不会真正帮助我 - parsedatetime 库不会接受时区参数(如果我错了,请纠正我)。这附近有散步吗?也许以某种方式设置环境 TZ?
谢谢!
您可以做的是使用 timedelta 对象添加差异 (http://docs.python.org/library/datetime.html)
偏移量
这里有一些(非常粗略的)代码给你一个想法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import parsedatetime import datetime my_users_timezone = whatever #replace this with a string that will make sense in the offsets dictionary utc_timezone_offsets_in_hours = { 'utc' : 0, 'pacific' : -8, # etc } parsed_time = parsedatetime.whatever(input_string) offset_hours = utc_utc_timezone_offsets_in_hours[my_users_timezone] final_time = parsed_time + datetime.timedelta(hours=offset_hours) return final_time |
您可以使用类似于上面的答案现在建议的代码,在
1 2 3 4 5 6 7 | import parsedatetime as pdt cal = pdt.Calendar() start = datetime.datetime.now().timetuple() parsed, flag = cal.parse('in 1 hr', start) |
然后您可以取