首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算上一季度末

计算上一季度末
EN

Stack Overflow用户
提问于 2013-05-31 19:08:46
回答 9查看 12.3K关注 0票数 10

我正在寻找一种优雅和节能型的方式来获得前一个季度结束的日期。

就像这样:

代码语言:javascript
复制
def previous_quarter(reference_date):
   ...


>>> previous_quarter(datetime.date(2013, 5, 31))
datetime.date(2013, 3, 31)

>>> previous_quarter(datetime.date(2013, 2, 1))
datetime.date(2012, 12, 31)

>>> previous_quarter(datetime.date(2013, 3, 31))
datetime.date(2012, 12, 31)

>>> previous_quarter(datetime.date(2013, 11, 1))
datetime.date(2013, 9, 30)

编辑:我试过什么了吗?

是的,这似乎奏效了:

代码语言:javascript
复制
def previous_quarter(ref_date):
    current_date = ref_date - timedelta(days=1)
    while current_date.month % 3:
        current_date -= timedelta(days=1)
    return current_date

但这似乎是不必要的迭代。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-05-31 19:18:59

只要看看你收到的月份,你就可以用“艰难的方式”来做这件事:

代码语言:javascript
复制
def previous_quarter(ref):
    if ref.month < 4:
        return datetime.date(ref.year - 1, 12, 31)
    elif ref.month < 7:
        return datetime.date(ref.year, 3, 31)
    elif ref.month < 10:
        return datetime.date(ref.year, 6, 30)
    return datetime.date(ref.year, 9, 30)
票数 22
EN

Stack Overflow用户

发布于 2013-05-31 19:25:17

使用丁香醇

代码语言:javascript
复制
import datetime as DT
import dateutil.rrule as rrule

def previous_quarter(date):
    date = DT.datetime(date.year, date.month, date.day)
    rr = rrule.rrule(
        rrule.DAILY,
        bymonth=(3,6,9,12),    # the month must be one of these
        bymonthday=-1,         # the day has to be the last of the month
        dtstart = date-DT.timedelta(days=100))
    result = rr.before(date, inc=False)  # inc=False ensures result < date
    return result.date()

print(previous_quarter(DT.date(2013, 5, 31)))
# 2013-03-31
print(previous_quarter(DT.date(2013, 2, 1)))
# 2012-12-31
print(previous_quarter(DT.date(2013, 3, 31)))
# 2012-12-31
print(previous_quarter(DT.date(2013, 11, 1)))
# 2013-09-30
票数 5
EN

Stack Overflow用户

发布于 2013-05-31 20:10:47

利用所涉及的数据模式,将问题转化为表查找--您的经典空时tradeff

代码语言:javascript
复制
from datetime import date

PQTBL = (((12,31,-1),)*3 + ((3,31,0),)*3 + ((6,30,0),)*3 + ((9,30,0),)*3)

def previous_quarter(ref):
    entry = PQTBL[ref.month-1]
    return date(ref.year+entry[2], entry[0], entry[1])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16864201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档