python-twitter将状态时间戳作为字符串和自纪元以来的秒数返回。后者是转换为时区感知datetime
实例的最简单方法(请参阅此答案)。
不幸的是,用户的time_zone
属性不是 tz 使用的标准tz 数据库格式pytz
,因此有必要使用utc_offset
user 属性(我们仍然使用该time_zone
属性来命名tzinfo
带有 UTC 偏移量的 created )。该python-dateutil
包提供了一种方便的类型tzoffset
,允许tzinfo
从 UTC 偏移量创建实例,然后我们可以使用它来将datetime
UTC 转换为本地时区:
import pytz
import twitter
from datetime import datetime
from dateutil.tz import tzoffset
USERNAME = 'ttytter'
api = twitter.Api()
# get a 'tzinfo' instance with the UTC offset for the user's local time
user = api.GetUser(USERNAME)
localtime_tz = tzoffset(user.time_zone, user.utc_offset)
statuses = api.GetUserTimeline(USERNAME)
for s in statuses[:1]:
# get UTC timestamp from seconds since epoch
utc_dt = datetime.utcfromtimestamp(s.created_at_in_seconds).replace(tzinfo=pytz.utc)
print('utc: {}'.format(utc_dt))
# convert to local time in the user's timezone
localtime_dt = utc_dt.astimezone(localtime_tz)
print('localtime [{}]: {}'.format(localtime_dt.tzname(), localtime_dt))
它给出了第一个状态的输出:
utc: 2012-10-20 04:56:47+00:00
localtime [Pacific Time (US & Canada)]: 2012-10-19 20:56:47-08:00