【问题标题】:Python // Filter out certain dates from an array by comparison from today's datePython // 通过与今天日期的比较从数组中过滤掉某些日期
【发布时间】:2020-03-17 11:38:39
【问题描述】:

我有这个日期列表:

['2020-03-17 12:00:00', '2020-03-17 15:00:00', '2020-03-17 18:00:00', '2020-03-17 21:00:00', '2020-03-18 00:00:00', '2020-03-18 03:00:00', '2020-03-18 06:00:00', '2020-03-18 09:00:00', '2020-03-18 12:00:00', '2020-03-18 15:00:00', '2020-03-18 18:00:00', '2020-03-18 21:00:00', '2020-03-19 00:00:00', '2020-03-19 03:00:00', '2020-03-19 06:00:00', '2020-03-19 09:00:00', '2020-03-19 12:00:00', '2020-03-19 15:00:00', '2020-03-19 18:00:00', '2020-03-19 21:00:00']

它包含每个间隔 3 小时的时间和截至 2020 年 3 月 19 日的多个日期,格式为 YYYY-MM-DD HH-MM-SS。

使用日期我可以得到今天的日期,现在我想将今天的日期与我上面的列表进行比较,并获取与今天的当前日期和明天匹配的所有日期,即:今天是 2020-03-17,我想要获取与今天和明天的日期匹配的所有日期,即 2020-03-17 和 2020-03-18

from datetime import date
current_date = date.today()

这是一个用于天气 api 请求的 Python 小练习项目。 (我是python新手,一直在研究这个问题,很难得到结果,最好在这里问一下,对你们来说可能是浪费时间,但对你有很大帮助~)

谢谢!

【问题讨论】:

    标签: python date datetime


    【解决方案1】:

    您可以预先定义今天和明天的日期,遍历列表中的字符串,使用datetime.strptime 适当地解析它们,然后查看日期部分是否与今天或明天的日期匹配:

    from datetime import datetime, timedelta
    
    today = datetime.today().date()
    tomorrow = today + timedelta(days=1)
    
    out = []
    for i in l:
        date =  datetime.strptime(i, '%Y-%m-%d %H:%M:%S').date()
        if date == today or date == tomorrow:
            out.append(i)
    
    print(out)
    
    ['2020-03-17 12:00:00',
     '2020-03-17 15:00:00',
     '2020-03-17 18:00:00',
     '2020-03-17 21:00:00',
     '2020-03-18 00:00:00',
     '2020-03-18 03:00:00',
     '2020-03-18 06:00:00',
     '2020-03-18 09:00:00',
     '2020-03-18 12:00:00',
     '2020-03-18 15:00:00',
     '2020-03-18 18:00:00',
     '2020-03-18 21:00:00']
    

    【讨论】:

      【解决方案2】:

      您可以遍历数组并检查日期是今天还是明天的日期对象:

      from datetime import datetime, timedelta
      
      today = datetime.now().date()
      tomorrow = today + timedelta(days=1)
      
      dates = [datetime.strptime(s, '%Y-%m-%d %H:%M:%S').date() for s in strings]
      result = [date for date in dates if date in (today, tomorrow)]
      

      【讨论】:

      • result = [datetime.strptime(s, '%Y-%m-%d %H:%M:%S') in (today, tomorrow) TypeError: strptime() argument 1 must be str, not float 错误?
      • @beepbeep-boop 你的输入数据肯定是字符串,所以我不知道你从哪里得到float 对象。
      【解决方案3】:

      使用dateutil.parser 可以帮助您避免定义/处理固定的日期时间格式。它会自动为您处理。

      from dateutil import parser
      from datetime import date, timedelta
      
      #timestamps=[your list of datatimes]
      
      today = date.today()
      tomorrow=today + timedelta(days=1)
      
      result=[dt for dt in timestamps if today <= parser.parse(dt).date() <= tomorrow]
      

      【讨论】:

        猜你喜欢
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多