从Twitter日期到Python datetime日期

58 投票
10 回答
40305 浏览
提问于 2025-04-17 03:59

我从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))

撰写回答