我试图用python获取前一个月的日期。
以下是我的尝试:
str( time.strftime('%Y') ) + str( int(time.strftime('%m'))-1 )
然而,这种方式有两个原因:首先,它将返回2012年2月的20122(而不是201202);其次,它将返回0而不是1月的12。
我一下子就解决了这个麻烦
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)
我还没有测试这段代码,我不想使用它(除非我找不到任何其他方法:/)
谢谢你的帮助!
明确的方式:
import datetime
result = (datetime.datetime.today().month - 2) % 12 + 1
问题是如何将月[1,2,3,…], 12]到[12,1,2,…]11)。
Step1: month = month - 1转移[1,2,3,…], 12] to[0,1,2,…]11)。
Step2: month = (month - 1) % 12 transfer[0,1,2,…], 11] to[11, 0,1,…], 10]。
Step3: month = month + 1 transfer[11, 0, 1,…], 10]到[12,1,2,…]11)。
因此,结果是result =(月- 2)% 12 + 1
明确的方式:
import datetime
result = (datetime.datetime.today().month - 2) % 12 + 1
问题是如何将月[1,2,3,…], 12]到[12,1,2,…]11)。
Step1: month = month - 1转移[1,2,3,…], 12] to[0,1,2,…]11)。
Step2: month = (month - 1) % 12 transfer[0,1,2,…], 11] to[11, 0,1,…], 10]。
Step3: month = month + 1 transfer[11, 0, 1,…], 10]到[12,1,2,…]11)。
因此,结果是result =(月- 2)% 12 + 1
基于@ j.f.的评论。Sebastian,您可以将replace()函数链接到一个“月”之前。因为一个月不是一个固定的时间段,所以这个解决方案尝试返回到前一个月的同一日期,当然这并不适用于所有月份。在这种情况下,该算法默认为前一个月的最后一天。
from datetime import datetime, timedelta
d = datetime(2012, 3, 31) # A problem date as an example
# last day of last month
one_month_ago = (d.replace(day=1) - timedelta(days=1))
try:
# try to go back to same day last month
one_month_ago = one_month_ago.replace(day=d.day)
except ValueError:
pass
print("one_month_ago: {0}".format(one_month_ago))
输出:
one_month_ago: 2012-02-29 00:00:00