从python中的datetime对象查找年份和季度

从python中的datetime对象查找年份和季度,python,datetime,Python,Datetime,我有一个要求,找到完成的季度(1月至12月1日至4日),给定一个特定的日期。请注意,它不是当前季度,而是已完成的季度。我的意思是,如果1月1日是输入日期,那么完成的季度是4,而不是1。我的小代码片段如下所示: >>> import datetime >>> import math >>> now = datetime.datetime(2015, 1, 1, 0, 0, 0, 0) >>> present_quarter =

我有一个要求,找到完成的季度(1月至12月1日至4日),给定一个特定的日期。请注意,它不是当前季度,而是已完成的季度。我的意思是,如果1月1日是输入日期,那么完成的季度是4,而不是1。我的小代码片段如下所示:

>>> import datetime
>>> import math
>>> now = datetime.datetime(2015, 1, 1, 0, 0, 0, 0)
>>> present_quarter = int(math.ceil(now.month/3.))
>>> completed_quarter = (present_quarter - 1) if present_quarter != 1 else 4
>>> completed_quarter
4
然而,我需要的是这一年,以便产出:

2014-4

最好的方法是什么?输出是否仍然是datetime对象而不是字符串?我的意思是Python是否支持datetime对象,如Year Quarter

您只需将月份映射到季度和年份增量(您需要去年的第4季度):

这会将月份转换为0到3之间的值,然后将其转换为季度数和年增量。将年份增量添加到当前年度中,可以为上一季度完成的年份提供正确的年份

演示:


datetime
模块没有可以为季度建模的对象;您可以有日期(必须有有效的年、月和日值)或日期和时间(添加有效的小时、分钟、秒和微秒值,并带有可选时区)。

您只需要捕捉第一季度:

def qrt(now):
    first_qrt = now.month < 4
    return now.year - first_qrt, (now.month - 1) // 3 if not first_qrt else 4
def qrt(现在):
第一个月=现在。月份<4
返回now.year-first\u qrt,(now.month-1)//3如果不是first\u qrt,则返回4

延长日期时间怎么样

class Quarter(datetime):
    def __init__(self, *args, **kwargs):
        super(Quarter, self).__init__(*args, **kwargs)
        present_quarter = int(math.ceil(self.month/3))
        self.quarter = (present_quarter-1) if present_quarter != 1 else 4
使用它

q = Quarter(2015,1,1,0,0,0)
# Or
q = Quarter.now()
# Getting quarter
print q.quarter

@马丁..我只是想了解..最终的结果是否可以是一个日期对象,以便我可以对其执行标准的日期操作?@Amistad:除非您将其转换回该季度的特定日期,否则不能。日期对象只能对实际日期建模,即具有年、月和日值的日期。@Amistad:季度的第一天是
date(year((季度-1)*3)+1,1)
例如,但要理解..now.year-True=2014和now.year-False=2015..这其中的基本逻辑是什么?
class Quarter(datetime):
    def __init__(self, *args, **kwargs):
        super(Quarter, self).__init__(*args, **kwargs)
        present_quarter = int(math.ceil(self.month/3))
        self.quarter = (present_quarter-1) if present_quarter != 1 else 4
q = Quarter(2015,1,1,0,0,0)
# Or
q = Quarter.now()
# Getting quarter
print q.quarter