簡體   English   中英

Python-Windows計算機上的日期對象-時區問題

[英]Python - date object from Windows machine — time zone issues

我有一個jQuery應用程序,它將日期對象發送到python進行解析。 問題是,當我嘗試在Windows計算機上使用jQuery時,date對象看起來像這樣:

Tue Mar 12 2013 00:00:00 GMT-0600(Mountain Daylight Time)

在Mac上,我得到:

Tue Mar 12 2013 00:00:00 GMT-0600(PST)

當我嘗試使用strptime函數在Python中解析這些時,它失敗了,因為它不了解第一個(MDT)末尾的時區。 它抱怨說是“未知的字符串格式”。

我該如何解決? 難道我做錯了什么?

最好的解決方案可能是讓您的jQuery代碼在發送日期時間之前將其日期時間轉換為GMT。 (如果還需要時區,請分別發送。)然后,您可以在Python端將它們從JSON(或其他任何方式)中strptime ,使用strptime將它們轉換為GMT datetime對象,並使用它們,完成了。

但是, 最簡單的解決方案(*,代碼更改最少)就是讓jQuery做錯事,而將時區拋在Python端。 基本上,代替這個:

dt = datetime.datetime.strptime(jsondate)

做這個:

dt = datetime.datetime.strptime(jsondate.partition('(')[0])

請注意,丟掉'('之后的所有內容仍會使您擁有-0600 ;您只是失去了“ PST”或“ Mountain Daylight Time”部分。

而且這些部分對您沒有任何好處。 datetime不了解這些時區名稱。 而且,即使這樣做,除了偏移量(您已經擁有)之外,它也沒有映射它們的任何方法。 如果需要實時時區,則需要一些第三方庫,例如pytz 。**

最重要的是, strptime專門返回朴素的datetime對象,而不知道那些對象。 因此,即使datetime可以解析並查找時區,它仍然對它們沒有任何用處,除非您解析datetime ,然后拉出時區並分別對其進行解析並查找,然后在datetime上調用astimezon

因此,總而言之,丟棄此信息的最壞情況就是您已經擁有的。

附帶說明一下,在連續的三個項目中,我將日期時間序列化器推入Python端的JSON en / decoder(對於JS端,將匹配的序列化器推到JS端),這樣我就可以傳遞一個UTC日期時間(采用ISO8601格式,因為它在計算機上像秒一樣容易使用,並且對於人類來說更容易讀取/編輯)和今天的時區偏移量,但是如果要切換為tzinfo鍵因為以后很重要。 所有三次,它從來沒有成為重要的......而且它一直是重要的項目,我通常也被繞過ICAL進度或預公歷日期或其他類似的有趣的東西。

最后,作為一個在我的職業生涯中寫了太多與日期相關的代碼的人,我必須這樣說:如果您知道有任何邪惡的霸主計划接管世界,如果他們承諾廢除時區,那么我願意忽略他們其他奴役人類或使小貓與嬰兒爭斗並注冊為酋長的程序。

*…至少對我來說最簡單,因為我比JS和jQuery更了解Python。 :)

** IIRC, pytz也無法處理“ Mountain Daylight Time”之類的NT樣式的時區鍵,因此您實際上需要另一個庫來處理。 我想我是從一個處理各種MS日期時間的庫中得到的,包括處理Microsoft的三個相似的1601時代紀元(兩個不太相同的紀元,特殊的“結束時間”的不同規則)之間的差異。 ,“時間的開始”和“不是日期”值,…)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM