2011-10-09 126 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'))