首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想生成连续的日期

我想生成连续的日期
EN

Stack Overflow用户
提问于 2012-11-24 16:54:32
回答 2查看 2.9K关注 0票数 3

我有一个这样的代码:

代码语言:javascript
复制
import time
from datetime import date
startyear = raw_input("start year: ")
startmonth = raw_input("start month: ")
startday = raw_input("start day: ")
endyear = raw_input("end year: ")
endmonth = raw_input("end month: ")
endday = raw_input("end day: ")

startdate = date(int(startyear), int(startmonth), int(startday))
while startdate < date(int(endyear), int(endmonth), int(endday)):
    print startdate
    startdate = startdate.replace(day=startdate.day + 1)

这段代码的作用是:

1.手工录入获取起止日期

2.生成它们之间的日期列表

但问题是,如果我设置日期,例如,

startdate: 2012-10-28

enddate: 2012-11-4

输出将如下所示:

代码语言:javascript
复制
2012-10-28
2012-10-29
2012-10-30
2012-10-31
ValueError: day is out of range for month

我希望输出是这样的:

代码语言:javascript
复制
2012-10-28
2012-10-29
2012-10-30
2012-10-31
2012-11-01
2012-11-02
2012-11-03
2012-11-04

所以我希望日期是按月计算的。有什么建议吗?任何帮助都是非常好的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-24 17:02:37

你应该使用timedelta而不是startdate.replace() ...

代码语言:javascript
复制
from datetime import date, timedelta
# Get input here...
while startdate < date(int(endyear), int(endmonth), int(endday)):
    print startdate
    startdate += timedelta(days=1)
票数 7
EN

Stack Overflow用户

发布于 2012-11-24 18:38:03

有一个名为python-dateutil的模块,它对这类事情非常有用:

代码语言:javascript
复制
from datetime import datetime
from dateutil.rrule import rrule, DAILY

list(rrule(DAILY, dtstart=datetime(2012, 11, 24), until=datetime(2012,11,30)))
# [datetime.datetime(2012, 11, 24, 0, 0), datetime.datetime(2012, 11, 25, 0, 0), datetime.datetime(2012, 11, 26, 0, 0), datetime.datetime(2012, 11, 27, 0, 0), datetime.datetime(2012, 11, 28, 0, 0), datetime.datetime(2012, 11, 29, 0, 0), datetime.datetime(2012, 11, 30, 0, 0)]

并具有其他选项,例如,按周几(仅适用于工作周的MO、TU、WE、TH、FR ):

代码语言:javascript
复制
from dateutil.rrule import MO, WE
list(rrule(DAILY, byweekday=[MO, WE], dtstart=datetime(2012, 11, 24), until=datetime(2012,11,30))
# [datetime.datetime(2012, 11, 26, 0, 0), datetime.datetime(2012, 11, 28, 0, 0)]
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13539734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档