【问题标题】:Creating a loop for two dates [duplicate]为两个日期创建循环[重复]
【发布时间】:2012-12-26 15:29:08
【问题描述】:

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

我有两个条目:

date1 = 2004.09.25
date2 = 2004.10.08

我想用 Python 编写一个脚本来识别日期范围并打印出来。像这样:

for i in range(date1:date2):
    print i

我是否需要以特定的日期格式定义日期? 预期的输出是这样的:

2004.09.25
2004.09.26
.
.
.
2004.10.08

【问题讨论】:

标签: python date for-loop python-2.7


【解决方案1】:

您的第一步应该是查看 python 日期时间库。

总体而言,您的第一个解决方案可能如下所示:

date1 = datetime.date(2004, 9, 25)
date2 = datetime.date(2004, 10, 8)
day = datetime.timedelta(days=1)

while date1 <= date2:
    print date1.strftime('%Y.%m.%d')
    date1 = date1 + day

(需要注意的一点:这显然会破坏您的 date1 变量)

我稍后会将它重构为一个 daterange 函数,以便您可以做一些更接近您所做的事情;它看起来像

for d in daterange(date1, date2):
    print d.strftime('%Y.%m.%d')

以后,当你发展你的python技能时,它可能是这样的:

for i in range((date2 - date1).days + 1):
    print (date1 + datetime.timedelta(days=i)).strftime('%Y.%m.%d')

或者这个,这将是我的最终版本:

def daterange(d1, d2):
    return (d1 + datetime.timedelta(days=i) for i in range((d2 - d1).days + 1))

for d in daterange(date1, date2):
    print d.strftime('%Y.%m.%d')

【讨论】:

  • 非常感谢。确实有见地
【解决方案2】:

使用内置的datetime 模块。

首先,将您的日期(假设它是一个字符串)按每个 . 拆分,然后将列表传递给 datetime.date

date1 = datetime.date(*date1.split('.'))
date2 = datetime.date(*date2.split('.'))

然后获取每个日期的ordinal(自 0001 年 1 月 1 日以来的天数)

date1 = date1.toordinal()
date2 = date2.toordinal()

然后,使用for 循环和fromordinal 函数将序数转换为日期

for i in range(date1, date2 + 1):
    print date.fromordinal(i).strftime('%Y.%m.%d')

把它们放在一起:

date1 = datetime.date(*date1.split('.')).toordinal()
date2 = datetime.date(*date2.split('.')).toordinal()
for i in range(date1, date2 + 1):
    print date.fromordinal(i).strftime('%Y.%m.%d')

【讨论】:

    【解决方案3】:

    使用序数函数会是这样的:

    import datetime
    
    DATE1 = datetime.date(2004,9,25)
    DATE2 = datetime.date(2004,10,8)
    D1 = datetime.date.toordinal(DATE1)
    D2 = (datetime.date.toordinal(DATE2))+1
    
    
    for i in range(D1,D2):
        print datetime.date.fromordinal(i)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2018-04-05
      • 2023-03-11
      • 2014-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多