Google App Engine,解析时间和时区

时间:2011-01-06 07:07:42

标签: django google-app-engine timezone

我正在使用Google App Engine / Django应用,我遇到了以下问题: 在我的HTML中,我有时间输入。输入是自由文本 - 用户键入“在1小时内”或“明天在上午11点”。然后将文本发送到AJAX中的服务器,AJAX使用此python库对其进行解析:http://code.google.com/p/parsedatetime/。解析后,服务器返回时间的纪元时间戳。 这是问题 - Google App Engine始终在UTC上运行。因此,假设当地时间现在是上午11点,UTC时间是凌晨2点。当我发送“now”到服务器时,它将返回“2am”,这很好,因为我希望以UTC时间收到日期。当我发送“1小时”时,服务器将返回“凌晨3点”,这是好的。然而,当我发送“中午”时,服务器将返回“12pm”因为它认为我正在谈论UTC中午 - 但实际上我需要它返回凌晨3点,这是请求发送者的中午..我可以传递发送请求的浏览器的TZ,但这并不能真正帮助我 - 解析时间库不会采用时区参数(如果我错了,请纠正我)。这附近有散步吗?也许以某种方式设置环境TZ?

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以做的是使用timedelta对象添加差异(http://docs.python.org/library/datetime.html)

偏移量

这里有一些(非常粗略的)代码可以提供您的想法:

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 :(得分:0)

parsedatetime的解析例程需要timetuple()作为sourceTime参数,并且应该包含您在其中包含的任何时区信息,因为我不记得编写任何覆盖它的代码。如果没有,那么这是一个错误,让我知道。

parse()例程返回确定日期时间的内容之后,您可以像上面建议的答案一样使用代码来添加TZ偏移量:

import parsedatetime as pdt

cal = pdt.Calendar()

start  = datetime.datetime.now().timetuple()

parsed, flag = cal.parse('in 1 hr', start)

然后您可以使用timetuple的{​​{1}}值并使用parsed来添加偏移小时数

相关问题