python – 是否有一致的方法来枚举两个日期之间的天/周/月?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 是否有一致的方法来枚举两个日期之间的天/周/月?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1679字,纯文字阅读大概需要3分钟。
内容图文
我有两个日期时间对象;开始日期和结束日期.我需要列举两者之间的日,周和月,包括在内.
理想情况下,结果将采用日期时间形式,但任何兼容的形式都可以.周和月由对应于星期/月的第一天的日期表示,其中星期一是一周的第一天,如ISO-8601中所示.这意味着结果可能包含早于开始日期的日期.
例如,鉴于2010-11-28至2010-12-01,结果将如下:
日:2010-11-28,2010-11-29,2010-11-30,2010-12-01
周:2010-11-22,2010-11-29
月:2010-11-01,2010-12-01
我意识到日期列表本身很简单,但我想要一个干净且一致的解决方案,对所有这三种方法使用类似的方法.看起来日历模块应该是有用的,但是我没有看到将它用于此目的的好方法.
解决方法:
使用dateutil:
import datetime
import dateutil.rrule as drrule
import dateutil.relativedelta as drel
import pprint
def dt2d(date):
'''
Convert a datetime.datetime to datetime.date object
'''
return datetime.date(date.year,date.month,date.day)
def enumerate_dates(start,end):
days=map(dt2d,drrule.rrule(drrule.DAILY, dtstart=start, until=end))
# Find the Monday on or before start
start_week=start+drel.relativedelta(weekday=drel.MO(-1))
end_week=end+drel.relativedelta(weekday=drel.MO(-1))
weeks=map(dt2d,drrule.rrule(drrule.WEEKLY, dtstart=start_week, until=end_week))
# Find the first day of the month
start_month=start.replace(day=1)
end_month=end.replace(day=1)
months=map(dt2d,drrule.rrule(drrule.MONTHLY, dtstart=start_month, until=end_month))
return days,weeks,months
if __name__=='__main__':
days,weeks,months=enumerate_dates(datetime.date(2010,11,28),
datetime.date(2010,12,01))
print('''days: {d}
weeks: {w}
months: {m}'''.format(d=map(str,days),w=map(str,weeks),m=map(str,months)))
产量
days: ['2010-11-28', '2010-11-29', '2010-11-30', '2010-12-01']
weeks: ['2010-11-22', '2010-11-29']
months: ['2010-11-01', '2010-12-01']
内容总结
以上是互联网集市为您收集整理的python – 是否有一致的方法来枚举两个日期之间的天/周/月?全部内容,希望文章能够帮你解决python – 是否有一致的方法来枚举两个日期之间的天/周/月?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。