2011-01-06 113 views
3

我正在研究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小时内”时,服务器将再次返回“3am”,这很好。然而,当我发送“中午”时,服务器将返回“12pm”,因为它认为我在谈论中午UTC - 但是真的需要它返回上午3点,这是请求发件人的中午。我可以传递发送请求的浏览器的TZ,但这不会真的帮助我 - parsedatetime库不会带timezone参数(如果我错了,请纠正我)。这是否有散步?也许设置环境TZ莫名其妙?Google App Engine,parsedatetime和TimeZones

谢谢!

+1

请选择一个答案或提供更多详细信息 – 2011-03-06 10:38:46

回答

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 
+0

dorkitude有正确的方法,应选择回答问题 – bear 2013-03-11 01:25:33

0

parsedatetime的parse例程需要timetuple()sourceTime参数,并应随身携带着你在它包括任何时区信息,我不记得书面推翻它的任何代码。如果它不是那么这是一个错误,让我知道。

您可以使用如下代码建议暂时添加TZ以上的答案parse()例程返回后,如何弥补它决定了日期时间为:

import parsedatetime as pdt 

cal = pdt.Calendar() 

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

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

那么你可以采取的timetupleparsed并使用timedelta添加您的抵消时间