2011-01-06 151 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添加您的抵消時間