Python 如何每月生成2006到2010年的数据时间
我知道如何生成datetime对象 datetime.datetime2006,1,1,0,0 但是如何从2006/1/1到2010/1/1每月生成一系列datatime对象呢 比如Python 如何每月生成2006到2010年的数据时间,python,Python,我知道如何生成datetime对象 datetime.datetime2006,1,1,0,0 但是如何从2006/1/1到2010/1/1每月生成一系列datatime对象呢 比如 for dt in [datetime.datetime(2006, 1, 1, 0, 0): datetime.datetime(2010, 1, 1, 0, 0)]: print(dt) 预期结果 2006, 1, 1, 0, 0 2006, 2, 1, 0, 0 2006, 3, 1, 0, 0 .
for dt in [datetime.datetime(2006, 1, 1, 0, 0): datetime.datetime(2010, 1, 1, 0, 0)]:
print(dt)
预期结果
2006, 1, 1, 0, 0
2006, 2, 1, 0, 0
2006, 3, 1, 0, 0
...
2010, 1, 1, 0, 0
更新
如图所示,在datetime库中增加月份是一个令人惊讶的挑战。但是,如果同时使用dateutil库,则会更容易:
from dateutil.relativedelta import relativedelta
print [datetime.datetime(2006, 1, 1, 0, 0) + relativedelta(months=i) for i in range(48)]
链接问题也有一些解决方案,可以在不使用dateutil的情况下执行此操作,但它们实际上更麻烦。您可以使用简单的循环:
print [datetime.datetime(y,m,1) for y in range(2006,2010) for m in range(1,13)]
有,
使用@Backtrack提到的calendar.monthrange生成一个生成每月日期时间的生成器。
日历和日期时间在标准库中提供
将为您提供以下结果:
datetime.datetime(2006, 1, 1, 0, 0)
datetime.datetime(2006, 2, 1, 0, 0)
datetime.datetime(2006, 3, 1, 0, 0)
datetime.datetime(2006, 4, 1, 0, 0)
datetime.datetime(2006, 5, 1, 0, 0)
datetime.datetime(2006, 6, 1, 0, 0)
datetime.datetime(2006, 7, 1, 0, 0)
...
datetime.datetime(2010, 1, 1, 0, 0)
嵌套循环?一年一个月一天需要if语句
print [datetime.datetime(y,m,1) for y in range(2006,2010) for m in range(1,13)]
from datetime import datetime
from dateutil.rrule import rrule, MONTHLY
for dt in rrule(MONTHLY, dtstart=datetime(2006, 1, 1), until=datetime(2010, 1, 1)):
print(dt)
import datetime
from calendar import monthrange
def months(start_datetime, end_datetime):
current_datetime = start_datetime
while current_datetime <= end_datetime:
yield current_datetime
_, days_in_month = monthrange(current_datetime.year, current_datetime.month)
current_datetime += datetime.timedelta(days=days_in_month)
start = datetime.datetime(2006, 1, 1)
end = datetime.datetime(2010, 1, 1)
for month_datetime in months(start, end):
print(month_datetime)
datetime.datetime(2006, 1, 1, 0, 0)
datetime.datetime(2006, 2, 1, 0, 0)
datetime.datetime(2006, 3, 1, 0, 0)
datetime.datetime(2006, 4, 1, 0, 0)
datetime.datetime(2006, 5, 1, 0, 0)
datetime.datetime(2006, 6, 1, 0, 0)
datetime.datetime(2006, 7, 1, 0, 0)
...
datetime.datetime(2010, 1, 1, 0, 0)