【问题标题】:Get dates as array [duplicate]以数组形式获取日期[重复]
【发布时间】:2012-12-29 00:07:05
【问题描述】:

可能重复:
Iterating through a range of dates in Python

我有一个方法可以传入开始日期和结束日期。最终结果是我想要开始日期和结束日期之间的所有日期作为列表。例如,如果开始日期是 '2013-01-01' 而结束日期是 '2013-01-04' 那么 ['2013-01-01','2013-01-02','2013-01-03 ','2013-01-04'] 应该返回。我可以做类似下面的事情。但想知道是否有一个我没有考虑过的简单方法

year = int(startdate.split('-')[0])
month = int(startdate.split('-')[1])
day = int(startdate.split('-')[2])

【问题讨论】:

标签: python date


【解决方案1】:
>>> from datetime import datetime, timedelta
>>> starttime = datetime.strptime('2013-01-01', '%Y-%m-%d')
>>> endtime = datetime.strptime('2013-01-04', '%Y-%m-%d')
>>> [starttime + timedelta(days=i) for i in range((endtime - starttime).days + 1)]
[datetime.datetime(2013, 1, 1, 0, 0), datetime.datetime(2013, 1, 2, 0, 0), datetime.datetime(2013, 1, 3, 0, 0), datetime.datetime(2013, 1, 4, 0, 0)]
>>> list(map(lambda x: x.strftime('%Y-%m-%d'), _))
['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04']

【讨论】:

    【解决方案2】:

    这应该可行:

    from datetime import datetime
    from datetime import timedelta
    
    d1 = datetime.strptime('2013-01-01', '%Y-%m-%d')
    d2 = datetime.strptime('2013-01-04', '%Y-%m-%d')
    
    [d1 + timedelta(days=x) for x in range(0, (d2 - d1).days + 1)]
    

    【讨论】:

      【解决方案3】:

      我会去:

      from dateutil import parser as dateparser
      from dateutil.rrule import rrule, DAILY
      
      sd = dateparser.parse('2013-01-01')
      ed = dateparser.parse('2013-01-04')
      
      dates = (rrule(DAILY, sd, until=ed))
      fmt = '{:%Y-%m-%d}'
      print map(fmt.format, dates)
      # ['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04']
      

      【讨论】:

      • 这确实引入了 Python stdlib 之外的依赖项 - 但如果处理 DT,它是一个有用的
      猜你喜欢
      • 2015-02-13
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多