从Twitter日期到Python datetime日期
我从Twitter收到了一些在特定日期发送的消息,格式如下:
Tue Mar 29 08:11:25 +0000 2011
我想把这些日期存储在PostgreSQL数据库中的“带时区的时间戳”字段里,使用Django的DateTimeField字段。但是,当我尝试存储这个字符串时,出现了这个错误:
ValidationError: [u'Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.']
我能不能自动把Twitter的日期格式转换成Python的日期时间格式(这样在我应用的其他地方保存日期是可以正常工作的)?
10 个回答
8
这段话有点旧了,但使用解析功能确实帮我解决了这个问题。
from datetime import datetime
from dateutil.parser import parse
date = 'Fri May 10 00:44:04 +0000 2019'
dt = parse(date)
print(dt)
# 2019-05-10 00:44:04+00:00
15
试试这个方法。它假设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])
98
写这样的代码应该可以把推特上的日期转换成时间戳。
import time
ts = time.strftime('%Y-%m-%d %H:%M:%S', time.strptime(tweet['created_at'],'%a %b %d %H:%M:%S +0000 %Y'))
更新
对于Python 3,从2020年开始,你可以这样做:
from datetime import datetime
# dtime = tweet['created_at']
dtime = 'Fri Oct 09 10:01:41 +0000 2015'
new_datetime = datetime.strftime(datetime.strptime(dtime,'%a %b %d %H:%M:%S +0000 %Y'), '%Y-%m-%d %H:%M:%S')
print((new_datetime))