【问题标题】:Python 2.7 Get month from 2 months ago (i.e get '05' from todays date)Python 2.7 从 2 个月前获取月份(即从今天开始获取“05”)
【发布时间】:2015-07-28 14:49:21
【问题描述】:

我确信有一种简单的方法可以做到这一点,而我在努力寻找答案时却错过了。

基本上,我如何从 n 个月前获得月数,即“05”或“04”?

抱歉,如果这已经得到回答,但我在这里研究的问题无法回答我的问题。

编辑

timedelta 中没有月份参数,所以这没有回答我的问题。

马丁完美地回答了我的问题!

【问题讨论】:

  • @MorganThrapp:一个月前你不会这样,因为月份的长度不规则。
  • @MartijnPieters 哦,对了,我忘了 timedelta 没有一个月的 kwarg。我认为它是出于某种原因。
  • 我认为是 relativedelta 有月份 kwarg

标签: python python-2.7 date datetime


【解决方案1】:

通过一些简单的模运算:

from datetime import date

def months_ago(count):
    today = date.today()
    return ((today.month - count - 1) % 12) + 1

演示:

>>> date.today()
datetime.date(2015, 7, 28)
>>> for i in range(13):
...     print(months_ago(i))
... 
7
6
5
4
3
2
1
12
11
10
9
8
7

【讨论】:

    【解决方案2】:

    虽然 Martijn 的答案非常适合任何偶然发现此答案以寻找 X 个月前日期而不仅仅是月份数字的人的具体问题,但我建议使用来自第三方模块 dateutilrelativedelta。我发现它很有帮助:

    >>> from datetime import date
    >>> from dateutil.relativedelta import relativedelta
    
    >>> today = date.today()
    datetime.date(2015, 7, 28)
    
    >>> for i in range(13):
            print(today - relativedelta(months=i))
    2015-07-28
    2015-06-28
    2015-05-28
    2015-04-28
    2015-03-28
    2015-02-28
    2015-01-28
    2014-12-28
    2014-11-28
    2014-10-28
    2014-09-28
    2014-08-28
    2014-07-28
    

    【讨论】:

    • 当然,这对任何查看此内容的人也有帮助!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多