为两个日期创建循环

2024-05-17 01:02:46 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
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

Tags: ofin脚本for格式条目rangedates
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)

使用内置的^{}模块。

首先,按每个.分割日期(假设它是一个字符串),并将列表传递给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')

您的第一步应该是查看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')

相关问题 更多 >