我试图用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)
我还没有测试这段代码,我不想使用它(除非我找不到任何其他方法:/)
谢谢你的帮助!
您来这里可能是因为您正在NiFi中使用Jython。这就是我最终实现它的方式。我稍微偏离了Robin Carlo Catacutan的答案,因为访问last_day_of_prev_month。由于这里解释的Jython数据类型问题,由于某种原因,这个问题似乎存在于NiFi的Jython中,但不存在于vanilla Jython中。
from datetime import date, timedelta
import calendar
flowFile = session.get()
if flowFile != None:
first_weekday_in_prev_month, num_days_in_prev_month = calendar.monthrange(date.today().year,date.today().month-1)
last_day_of_prev_month = date.today().replace(day=1) - timedelta(days=1)
first_day_of_prev_month = date.today().replace(day=1) - timedelta(days=num_days_in_prev_month)
last_day_of_prev_month = str(last_day_of_prev_month)
first_day_of_prev_month = str(first_day_of_prev_month)
flowFile = session.putAllAttributes(flowFile, {
"last_day_of_prev_month": last_day_of_prev_month,
"first_day_of_prev_month": first_day_of_prev_month
})
session.transfer(flowFile, REL_SUCCESS)