我正在开发一个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小时内”服务器将返回"3am“,这是好的,再次。然而,当我发送“在中午”时,服务器会返回“12‘m”,因为它认为我说的是UTC的中午时间--但实际上我需要它返回凌晨3点,这对于请求发送者来说是中午。我可以传递发送请求的浏览器的TZ,但这对我没有真正的帮助- parsedatetime库不会接受时区参数(如果我错了,请纠正我)。这附近有散步的地方吗?也许可以通过某种方式设置环境TZ?
谢谢!
发布于 2011-01-13 15:18:14
您可以使用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发布于 2011-01-13 15:48:12
parsedatetime的解析例程需要一个timetuple()作为sourceTime参数,并且应该携带你在其中包含的任何时区信息,因为我不记得写了任何覆盖它的代码,如果没有,那么它就是一个bug,并让我知道。
您可以使用类似上述答案的代码,在parse()例程返回它确定的日期时间后添加TZ偏移量:
import parsedatetime as pdt
cal = pdt.Calendar()
start = datetime.datetime.now().timetuple()
parsed, flag = cal.parse('in 1 hr', start)然后,您可以获取parsed的timetuple值,并使用timedelta添加您的偏移小时数
https://stackoverflow.com/questions/4612635
复制相似问题