可能重复:
在 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 中遍历一系列日期
我有两个条目:
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 日期时间库。
总体而言,您的第一个解决方案可能如下所示:
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')
使用内置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')
使用序数函数会是这样的:
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)