Python获取当前日历qu的第一天和最后一天

2024-05-15 14:16:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经建立了一个函数来获取当前季度的第一天和最后一天,但它有点冗长。我在想,有没有更简洁的方法来完成这件事?

我知道pandas有一个QuarterBegin()函数,但我无法以更简洁的方式实现它。

import datetime as dt
from dateutil.relativedelta import relativedelta     

def get_q(first=None,last=None):

    today = dt.date.today()

    qmonth = [1, 4, 7, 10]

    if first:
        for i,v in enumerate(qmonth):
            if (today.month-1)//3 == i:
                return dt.date(today.year,qmonth[i],1).strftime("%Y-%m-%d")

    if last:
        firstday = dt.datetime.strptime(get_q(first=True),"%Y-%m-%d") 
        lastday = firstday + relativedelta(months=3, days=-1)
        return lastday.strftime("%Y-%m-%d")

编辑:请告诉我这是否更适合Code Review


Tags: 函数importnonegettodaydatetimedatereturn
3条回答

为什么这么复杂:-)

from datetime import date
from calendar import monthrange

quarter = 2
year = 2016
first_month_of_quarter = 3 * quarter - 2
last_month_of_quarter = 3 * quarter
date_of_first_day_of_quarter = date(year, first_month_of_quarter, 1)
date_of_last_day_of_quarter = date(year, last_month_of_quarter, monthrange(year, last_month_of_quarter)[1])

你可以这样做:

import bisect
import datetime as dt

def get_quarter_begin():
    today = dt.date.today()

    qbegins = [dt.date(today.year, month, 1) for month in (1,4,7,10)]

    idx = bisect.bisect(qbegins, today)
    return str(qbegins[idx-1])

这解决了“第一个”情况;我将“最后一个”情况留作练习,但我建议将其作为一个独立的函数来澄清(对于您的原始版本,如果没有参数被传递,会发生什么非常奇怪的事情!)。

为什么要自己滚?

import pandas as pd

quarter_start = pd.to_datetime(pd.datetime.today() - pd.tseries.offsets.QuarterBegin(startingMonth=1)).date()

相关问题 更多 >