gpt4 book ai didi

python - 是否有一致的方法来枚举两个日期之间的天数/周数/月数?

转载 作者:太空狗 更新时间:2023-10-30 03:07:31 27 4
gpt4 key购买 nike

我有两个 datetime 对象;开始日期和结束日期。我需要枚举两者之间的天数、周数和月数,包括在内。

理想情况下,结果将采用 datetime 格式,但任何兼容的格式都可以。周和月由与周/月的第一天相对应的日期表示,其中星期一是一周的第一天,如 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

我意识到天数列表本身很简单,但我想要一个干净且一致的解决方案,对所有三个天数都使用类似的方法。看起来 calendar 模块应该很有用,但我没有看到为此目的使用它的好方法。

最佳答案

使用 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 - 是否有一致的方法来枚举两个日期之间的天数/周数/月数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392594/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com