Flask-如何将API调用中的日期时间JSON数据转换为“最近一次X小时/分钟”?

问题描述

我正在使用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()中,您会很方便!