问题描述
我正在使用Flask,并且从API调用中获取了日期时间JSON数据,我想将日期时间数据转换为“小时前”格式,但是我不知道从哪里开始。
这是我从API调用中收到的数据:
{'first_seen': datetime.datetime(2014,9,12,23,50,5,989719),'last_seen': datetime.datetime(2020,8,19,35,4,417316)
例如,我希望"last_seen"
转换为“最近一次:3小时”或“最近一次:12天”。
原始API调用:
client = TwitchClient(app.config['TWITCH_CLIENT_ID'])
users = client.users.translate_usernames_to_ids(streamer)
streamers_page_list = []
for user in users:
streamer_channel_info = {
'first_seen': user['created_at'],'last_seen': user['updated_at'],'name': user['display_name'],'bio': user['bio'],'logo': user['logo'],'id': user['id']
}
streamers_page_list.append(streamer_channel_info)
解决方法
这实际上应该不太难。由于您已经有了datetime
对象,因此可以通过从当前日期时间中减去last_seen日期时间来获得timedelta
对象。
从这个timedelta
对象中,您可以简单地将代表天,秒或毫秒作为属性。
因此,您基本上可以执行以下操作:
delta = datetime.datetime.now() - last_seen
if delta.days > 0:
print("{} days ago".format(delta.days))
else:
print("{} hours ago".format(int(delta.seconds / 3600)))
,
互相提取两个datetime对象,将为您提供一个timedelta对象:
delta = datetime(2020,8,19,9,35,4,417316) - datetime(2014,12,23,50,5,989719)
delta
# output:
# datetime.timedelta(days=2167,seconds=35098,microseconds=427597)
您可以像这样从timedelta对象提取天/秒差:
delta.days
delta.seconds
然后您可以根据需要重新设置此信息的格式。
,最快,最干净的方法是使用名为humanize的库。
直接从文档中提取示例:
>>> import humanize
>>> import datetime as dt
>>> humanize.naturalday(dt.datetime.now())
'today'
>>> humanize.naturaldelta(dt.timedelta(seconds=1001))
'16 minutes'
>>> humanize.naturalday(dt.datetime.now() - dt.timedelta(days=1))
'yesterday'
>>> humanize.naturalday(dt.date(2007,6,5))
'Jun 05'
>>> humanize.naturaldate(dt.date(2007,5))
'Jun 05 2007'
>>> humanize.naturaltime(dt.datetime.now() - dt.timedelta(seconds=1))
'a second ago'
>>> humanize.naturaltime(dt.datetime.now() - dt.timedelta(seconds=3600))
'an hour ago'
我认为这是最好的方法。将相应的日期时间分别提交到humanize.naturaltime()
和humanize.naturalday()
中,您会很方便!