如何获取上个月的python日期?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (683)

我正在尝试使用python获取上个月的日期。这是我试过的:

str( time.strftime('%Y') ) + str( int(time.strftime('%m'))-1 )

然而,这种方式不好,原因有两个:首先它返回2012年2月的20122(而不是201202),其次它会在1月份返回0而不是12。

我用bash解决了这个问题

echo $(date -d"3 month ago" "+%G%m%d")

我认为,如果bash为此目的提供了内置的方法,那么python就更有能力提供比强制自己的脚本来实现这个目标更好的东西。当然,我可以做一些事情:

if int(time.strftime('%m')) == 1:
    return '12'
else:
    if int(time.strftime('%m')) < 10:
        return '0'+str(time.strftime('%m')-1)
    else:
        return str(time.strftime('%m') -1)

我没有测试过这个代码,我也不想使用它(除非我找不到其他方法)

提问于
用户回答回答于

datetime和datetime.timedelta类是你的朋友。

  1. 今天找到。
  2. 用它来找到本月的第一天。
  3. 使用timedelta备份一天,到上个月的最后一天。
  4. 打印要查找的YYYYMM字符串。

这个:

 >>> import datetime
 >>> today = datetime.date.today()
 >>> first = today.replace(day=1)
 >>> lastMonth = first - datetime.timedelta(days=1)
 >>> print lastMonth.strftime("%Y%m")
 201202
 >>>
用户回答回答于

你应该使用dateutil。有了这个,你可以使用relativedelta,它是timedelta的改进版本。

>>> import datetime 
>>> import dateutil.relativedelta
>>> now = datetime.datetime.now()
>>> print now
2012-03-15 12:33:04.281248
>>> print now + dateutil.relativedelta.relativedelta(months=-1)
2012-02-15 12:33:04.281248

扫码关注云+社区

领取腾讯云代金券