【问题标题】:How do we determine the number of days for a given month in python [duplicate]我们如何在python中确定给定月份的天数[重复]
【发布时间】:2011-06-23 17:33:16
【问题描述】:

我需要在 python 中计算给定月份的天数。如果用户输入 2011 年 2 月,程序应该能够告诉我 2011 年 2 月有 28 天。谁能告诉我应该使用哪个库来确定给定月份的长度。

【问题讨论】:

    标签: python


    【解决方案1】:

    你应该使用calendar.monthrange:

    >>> from calendar import monthrange
    >>> monthrange(2011, 2)
    (1, 28)
    

    需要明确的是,monthrange 也支持闰年:

    >>> from calendar import monthrange
    >>> monthrange(2012, 2)
    (2, 29)
    

    正如@mikhail-pyrev 在评论中提到的那样:

    第一个数字是该月第一天的工作日,第二个数字是该月的天数。

    【讨论】:

    • (2,29) 是什么意思?我认为应该是(1,28)...
    • @NamGVU 第一个数字是该月第一天的工作日,第二个数字是该月的天数。
    • @NamGVU 2011 年,2 月份从工作日开始,有 28 天。 2012年第一个工作日是2号,当年这个月有29天。
    • @Maddie Nope,都从工作日开始:2011 年 2 月的星期四 (1) 和 2012 年 2 月的星期三 (2)。第一个整数不返回工作日,而是返回星期。默认从0(星期一)到6(星期日)。
    • @NunoAndré 我知道。我解释说,在 2011 年,二月(这就是 2),第一个 (1) 是工作日。当年的二月有 28 天。 2012年2月(2),第一个工作日是第二个(2),2012年2月有29天。
    【解决方案2】:

    替代解决方案:

    >>> from datetime import date
    >>> (date(2012, 3, 1) - date(2012, 2, 1)).days
    29
    

    【讨论】:

    • 这个方案的难点在于,如果要连续多年每个月使用,需要兼顾年增量和月周期。
    • 这是一个简单的模数(因为一年中的第一个月和最后一个月总是相同的)
    • OP 声明他希望在给定的月份(和年份)内使用它,因此这个解决方案很好。他需要一次检查 1 个日期。您可以将其替换为年、月和日的 var 以使其更灵活,但此解决方案效果很好!
    【解决方案3】:

    只是为了学术兴趣,我是这样做的……

    (dt.replace(month = dt.month % 12 +1, day = 1)-timedelta(days=1)).day
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2016-01-13
      • 2011-06-20
      相关资源
      最近更新 更多