【问题标题】:Finding Days Per Month From Now Until End Date从现在到结束日期每月查找天数
【发布时间】:2019-09-17 02:08:48
【问题描述】:

我正在尝试创建一个数组,该数组将容纳从当前月份到指定的未来日期的每个月的日期(对于这种情况,我将使用 2022 年 12 月 31 日)。

到目前为止,我可以将其设置为获取给定年份中每个月的每一天,但仅从一月份开始。

我需要做的是,例如从 9 月开始,为 2022 年 9 月、10 月、11 月...12 月创建包含一个月中天数的数组。

到目前为止我的代码:

total = 0
days = []
dayst = []
for i in range(1,13):
    month = datetime.datetime.strptime('{}'.format(i), "%m").strftime("%B")
    length_of_month = calendar.monthrange(MODELYEAR, i)[1]
    total = total + length_of_month
    days.append(length_of_month)
    dayst.append(total)
    totaldays = sum(days)

有电流输出:

[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

我基本上只需要动态结束时间并将开始时间转移到当前月份。

谢谢大家!

【问题讨论】:

标签: python


【解决方案1】:

使用日期时间库获取两个日期之间的天数

>>> import calendar
>>> from dateutil import rrule
>>> from datetime import datetime
>>> end = datetime.strptime('12/31/2022', '%m/%d/%Y')
>>> start = datetime.now()
>>> [calendar.monthrange(dt_i.year, dt_i.month)[1] for dt_i in rrule.rrule(rrule.MONTHLY, dtstart=start, until=end)]
[30, 31, 30, 31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

【讨论】:

  • 这没有回答问题。我试图得到每个月的天数而不是总天数。
  • 我们去!这就是我一直在寻找的,感谢您的补充响应。
  • @bathtub2007 我已经更新了答案。如果您觉得它有用,请为答案投票 :)
【解决方案2】:

您需要获取每个感兴趣的月份的第一天,然后计算到下个月第一天的天数。

import datetime

def days(ending):
    now = datetime.datetime.now()
    next_month = datetime.datetime(now.year, now.month, 1)
    while next_month <= ending:
        month = next_month
        y = month.year
        m = month.month + 1
        if m > 12:
            y += 1
            m = 1
        next_month = datetime.datetime(y, m, 1)
        yield (next_month - month).days

【讨论】:

    【解决方案3】:

    基本上,您需要确定从当前日期到未来日期的每个月的天数。我认为这是一种非常直接的方法:

    import calendar
    import datetime
    
    
    def days_per_month_until_end_date(end_year, end_month, end_day):
        today = datetime.datetime.today()
        future_date = datetime.datetime(end_year, end_month, end_day)
        result = []
        for year in range(today.year, future_date.year+1):
            start_month = today.month if year == today.year else 1
            end_month = future_date.month if year == future_date.year else 12
            for month in range(start_month, end_month+1):
                dim = calendar.monthlen(year, month)  # Days In Month
                result.append(dim)
        return result
    
    
    print(days_per_month_until_end_date(2022, 12, 31))
    

    在 2019 年 9 月 16 日运行它打印的结果,结束日期如图所示):

    [30, 31, 30, 31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多