Flask - 如何将 API 调用中的日期时间 JSON 数据转换为 "Last Seen X hours/minutes Ago"?
Flask - How to turn datetime JSON data from an API call into a "Last Seen X hours/minutes Ago"?
我正在使用 Flask,通过 API 调用我得到了日期时间 JSON 数据,我想将日期时间数据转换为“小时前”格式,但我不知道从哪里开始。
这是我从 API 调用中收到的数据:
{'first_seen': datetime.datetime(2014, 9, 12, 23, 50, 5, 989719),
'last_seen': datetime.datetime(2020, 8, 19, 9, 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)))
从彼此中提取两个日期时间对象,将得到一个 timedelta 对象:
delta = datetime(2020, 8, 19, 9, 35, 4, 417316) - datetime(2014, 9, 12, 23, 50, 5, 989719)
delta
# output:
# datetime.timedelta(days=2167, seconds=35098, microseconds=427597)
您可以像这样从 timedelta 对象中提取 days/seconds 差异:
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, 6, 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()
,您就可以开始了!
我正在使用 Flask,通过 API 调用我得到了日期时间 JSON 数据,我想将日期时间数据转换为“小时前”格式,但我不知道从哪里开始。
这是我从 API 调用中收到的数据:
{'first_seen': datetime.datetime(2014, 9, 12, 23, 50, 5, 989719),
'last_seen': datetime.datetime(2020, 8, 19, 9, 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)))
从彼此中提取两个日期时间对象,将得到一个 timedelta 对象:
delta = datetime(2020, 8, 19, 9, 35, 4, 417316) - datetime(2014, 9, 12, 23, 50, 5, 989719)
delta
# output:
# datetime.timedelta(days=2167, seconds=35098, microseconds=427597)
您可以像这样从 timedelta 对象中提取 days/seconds 差异:
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, 6, 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()
,您就可以开始了!