将日期四舍五入到最接近的半年

时间:2019-07-10 07:14:03

标签: python datetime

我希望能够以python中的DD MMM YYYY格式将当前日期四舍五入到最近(等于/等于)半年。

示例1:如果今天是10 Jul 2019,我希望代码输出显示31 Dec 2019

示例2:如果今天是15 Jan 2019,我希望输出为30 Jun 2019

我还希望月份是6月/ 12月(MMM),而不是06或12。

我已经导入了datetime包,但是不知道如何继续。我正在尝试使用round函数,但也不确定。

我的电子邮件地址有代码:请参阅截至DD MMM YYYY的半年要求。我希望自动填充DD MMM YYYY

2 个答案:

答案 0 :(得分:0)

在此回复Python round up integer to next hundred的帮助下,您可以使用以下方式:

from datetime import datetime
from calendar import monthrange

def roundup(x, b=6):
    return x if x % b == 0 else x + b - x % b

def get_nearest_halfyear(date_str):
    d = datetime.strptime(date_str, '%d %b %Y')
    m = roundup(d.month)
    return datetime(year=d.year, month=m, day=monthrange(d.year, m)[-1] ).strftime('%d %b %Y')

for s in ['10 Jul 2019', '15 Jan 2019']:
    print('Please refer to the requirements for the half year ending {}.'.format(get_nearest_halfyear(s)))

打印:

Please refer to the requirements for the half year ending 31 Dec 2019.
Please refer to the requirements for the half year ending 30 Jun 2019.

答案 1 :(得分:0)

您可以通过检查date.today().month//7 >0来完成此操作。这样可以得出当日是一年中的哪半年,并相应地返回半年的最后一天。

from datetime import datetime,date
def get_nearest_halfyear(date_var):
    return date(date_var.year, 12, 31).strftime("%d %b %Y") if date_var.month//7>0 else date(date_var.year, 6, 30).strftime("%d %b %Y")
print('Please refer to the requirements for the half year ending {}.'.format(get_nearest_halfyear(date.today())))
  

输出:请参阅截至2019年12月31日的半年的要求。