【问题标题】:How to get all dates (month, day and year) between two dates in python?如何在python中获取两个日期之间的所有日期(月、日和年)?
【发布时间】:2012-07-04 06:23:56
【问题描述】:

情况: 我正在尝试构建一个简单的方法,该方法接受代表两个不同日期的两个不同整数。以 2012 年 5 月 25 日的 20120525 和 2012 年 6 月 26 日的 20120627 为例。我希望此方法返回这些整数类型的列表,这些整数类型表示两个日期参数之间的所有日期。

问题: 我能否获得有关如何执行此操作以及如何处理每个月 28、29、30 或 31 天的任何建议。我想我可以通过除法/修改 10 的幂来将数字提取为整数,然后根据上述特定条件递增这些数字,但我觉得必须有更简单的方法来做到这一点。

【问题讨论】:

标签: python datetime date


【解决方案1】:

您不必重新发明轮子。只需将字符串解析为日期时间对象,然后让 python 为您计算:

from dateutil import rrule
from datetime import datetime

a = '20120525'
b = '20120627'

for dt in rrule.rrule(rrule.DAILY,
                      dtstart=datetime.strptime(a, '%Y%m%d'),
                      until=datetime.strptime(b, '%Y%m%d')):
    print dt.strftime('%Y%m%d')

打印

20120525
20120526
20120527
…
20120625
20120626
20120627

【讨论】:

    【解决方案2】:

    这里是不使用rrule 的替代解决方案:

    import datetime
    
    d1 = datetime.date(2015, 1, 1)
    d2 = datetime.date(2015, 2, 6)
    days = [d1 + datetime.timedelta(days=x) for x in range((d2-d1).days + 1)]
    
    for day in days:
        print(day.strftime('%Y%m%d'))
    

    输出:

    20150101
    20150102
    20150103
    <snip>
    20150205
    20150206
    

    【讨论】:

      【解决方案3】:

      你可以使用pandas.date_range

      import pandas
      
      pd.date_range('2012-05-25', '2012-06-27', freq='D')
      

      会产生,

      DatetimeIndex(['2012-05-25', '2012-05-26', '2012-05-27', '2012-05-28',
                     '2012-05-29', '2012-05-30', '2012-05-31', '2012-06-01',
                     ...
                     '2012-06-22', '2012-06-23', '2012-06-24', '2012-06-25',
                     '2012-06-26', '2012-06-27'],
                     dtype='datetime64[ns]', freq='D')
      

      【讨论】:

      • 您的代码有错误。第一行应为import pandas as pd
      • 但是我不推荐这个,使用pandas库来实现一个超级简单的功能!!使用国家电网为手机充电!
      • 显然,这只有在您已经将 pandas 用于您的项目的其他东西时才有意义。如果你这样做了,那么它比上面的解决方案更简单。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2013-08-09
      • 2015-05-20
      • 2014-04-07
      • 1970-01-01
      • 2022-10-02
      相关资源
      最近更新 更多