【问题标题】:Getting a list of months between two dates获取两个日期之间的月份列表
【发布时间】:2016-05-26 09:11:42
【问题描述】:

我需要实现代码来帮助我获取两个日期之间的月份列表。

我已经有了给出月份 delta 的代码,即月份数。

实际上,我需要获取两个日期之间月份列表的方法。

这是获取月份增量的代码。

import calendar
import datetime

def calculate_monthdelta(date1, date2):
    def is_last_day_of_the_month(date):
        days_in_month = calendar.monthrange(date.year, date.month)[1]
        return date.day == days_in_month
    imaginary_day_2 = 31 if is_last_day_of_the_month(date2) else date2.day
    monthdelta = (
        (date2.month - date1.month) +
        (date2.year - date1.year) * 12 +
        (-1 if date1.day > imaginary_day_2 else 0)
        )
    print monthdelta
    return monthdelta

date2 = datetime.datetime.today()
date1 = date2.replace(month=01)

calculate_monthdelta(date1, date2)

现在我需要获取相同月份列表的方法。

如果有任何方法可以获取两个日期之间的月份列表,我们将不胜感激。

注意:除了我在这里使用的代码之外,请提出任何想法(如果有的话)。

【问题讨论】:

标签: python datetime calendar


【解决方案1】:

试试这个

import datetime
import time
from dateutil.rrule import rrule, MONTHLY
months = [dt.strftime("%m") for dt in rrule(MONTHLY, dtstart=date1, until=date2)]
print months

【讨论】:

    【解决方案2】:
    from datetime import datetime,timedelta
    import time
    d = date1
    delta = timedelta(months=1)
    while d <= date2:
        print d.strftime("%m")
        d += delta
    

    【讨论】:

    • 这也是我想到的第一件事,但是,timedelta 不接受月份。
    • 你是对的,提供了另一个答案(下)。
    【解决方案3】:

    因为我不知道您想要的输出,所以我无法格式化我的输出,但这会返回两个日期之间总月数的整数。

    def calculate_monthdelta(date1, date2):
        print abs(date1.year - date2.year) * 12 + abs(date1.month - date2.month)
    

    【讨论】:

      【解决方案4】:

      将您的打印声明更改为:
      print calendar.month_name[:monthdelta]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 2015-05-20
        • 2013-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多