2011-10-09 129 views
30

我收到的是在某一特定日期按以下格式從Twitter發送Twitter消息:從Twitter日期將Python的日期時間日期

Tue Mar 29 08:11:25 +0000 2011 

我想這些日期店內「時間戳和時區」 postgresql中的字段與djangos DateTimeField字段。當我存儲的字符串,但是我得到這個錯誤:

ValidationError: [u'Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.'] 

我可以自動變換嘰嘰喳喳datetype爲Python日期時間的時間(即沒有在我的應用程序的其他地方工作,保存日期)。

回答

54

寫這樣的東西應該將twitter日期轉換爲時間戳。

import time 

ts = time.strftime('%Y-%m-%d %H:%M:%S', time.strptime(tweet['created_at'],'%a %b %d %H:%M:%S +0000 %Y')) 
2

你可以使用datetime.strptime()time.strptime()來轉換日期。但是,這兩個函數無法解析時區偏移量(請參見this bug)。

所以,我看到的唯一的解決辦法是你自己,你會分裂的日期,刪除時區偏移,其餘喂strptime(),並處理手動偏移...

看看this question,找到一些關於如何自己分析偏移的提示。

11

給這個去吧。它假設twitter的日期格式符合RFC822(參見@Adrien鏈接的問題)。

一個天真的日期時間對象被構造(即沒有時區信息)。它根據UTC的時區偏移進行調整。除非您需要保留原始時區,否則我會將日期時間存儲爲UTC,並在顯示時將其格式化爲當地時間。

from datetime import datetime, timedelta 
from email.utils import parsedate_tz 

s = 'Tue Mar 29 08:11:25 +0000 2011' 

def to_datetime(datestring): 
    time_tuple = parsedate_tz(datestring.strip()) 
    dt = datetime(*time_tuple[:6]) 
    return dt - timedelta(seconds=time_tuple[-1]) 
+0

我更喜歡這種方法,因爲它甚至適用於不同於+0000的時區(儘管Twitter總是使用+0000)。 Django方面也更好地使用utc timezone進行日期時間識別(請參閱[這個問題])(http://stackoverflow.com/questions/7065164/how-to-make-an-unaware-datetime-timezone-知道在Python中)) – caipirginka

1

以下代碼將從Twitter日期(UTC)打印一個不錯的日期(本地時間)。

from datetime import datetime 
from datetime import timezone  

datetime.strptime(mydata["created_at"], '%a %b %d %H:%M:%S %z %Y').replace(
      tzinfo=timezone.utc).astimezone(tz=None).strftime('%Y-%m-%d %H:%M:%S'))