【问题标题】:How to subtract n minutes from list of datetime and return the datetime that matches如何从日期时间列表中减去 n 分钟并返回匹配的日期时间
【发布时间】:2019-06-06 23:47:08
【问题描述】:

我有 twitter 上推文的日期列表,它返回类似这些推文的创建时间

Thu Jun 06 22:02:08 +0000 2019
Thu Jun 06 22:47:37 +0000 2019

我想返回一些 10 分钟前创建的帖子

我尝试将这些转换为日期时间并从当前时间减去 10 分钟,看看上述日期时间是否介于当前时间减去 10 分钟之间

minutes = 10
time_diff = datetime.datetime.utcnow() - datetime.timedelta(minutes=minutes)
formated_time_and_date = time_diff.strftime("%a %b %d %Y %H:%M:%S")
mins_now = int(time_diff.minute)
print(f"Minutes now: {mins_now}")
hours_now = int(time_diff.hour)

print(f"hours now: {hours_now}")
# print(formated_time_and_date[:13])
minutes = int(formated_time_and_date.split(':')[1])
recent_timeline_tweets = list(filter(lambda x: x.get(
        'date') == formated_time_and_date[:15] and
        (x.get('hours') == hours_now) and mins_now >= x.get('minutes'), tweets))

tweets 变量是推文对象的列表。 这个想法只是从日期时间列表中获取最后 n 分钟的日期时间,比如 10 分钟或 60 分钟前发布的帖子返回那些日期时间

【问题讨论】:

标签: python python-3.x datetime twitter


【解决方案1】:

Python 2:

import datetime
from dateutil.parser import parse

desired_minutes = 10

formated_time_and_date = [
    'Thu Jun 06 22:02:08 +0000 2019',
    'Thu Jun 06 22:47:37 +0000 2019'
]

recent_timeline_tweets = list(
    filter(
        lambda x:
            (datetime.datetime.utcnow() - parse(x).replace(tzinfo=None)) < datetime.timedelta(minutes=desired_minutes),
        formated_time_and_date
    ))

Python 3:

首先安装python 2内置的python-dateutil

pip install python-dateutil

然后再次运行上面的代码(我为python 2提供的);)

【讨论】:

  • 我收到此错误TypeError: replace() takes no keyword arguments 我所做的解决方法是将 formated_time_and_date 值转换为日期时间,就像这样 formated_time_and_date = [datetime.datetime.strptime( d, "%a %b %d %H:%M:%S +0000 %Y") for d in formated_time_and_date] 您的解决方案有效。
  • 我已经编辑了我的解决方案,你只需要使用导入的解析来解决这个问题! parse(x).replace(tzinfo=None)。转换更简单灵活!
猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多