Ale*_*lli 139
给定一个实例x的datetime.date,(x.month-1)//3会给你的四分之一(0第一季度,1第二季度,等等-加1,如果你需要从1计数,而不是;-).
最初有两个答案,乘以upvoted甚至最初接受(目前都已删除),都是错误的 - 没有-1在分割之前做,而是除以4而不是3.自从.month1到12之后,很容易检查自己是什么公式对:
for m in range(1, 13):
print m//4 + 1,
print
Run Code Online (Sandbox Code Playgroud)
给出1 1 1 2 2 2 2 3 3 3 3 4- 两个四个月的季度和一个月的一个月(eep).
for m in range(1, 13):
print (m-1)//3 + 1,
print
Run Code Online (Sandbox Code Playgroud)
给出1 1 1 2 2 2 3 3 3 4 4 4- 现在这看起来不是很适合你? - )
这证明了这个问题是有道理的,我认为;-).
我不认为datetime模块应该具有所有可能的有用的日历功能,但我知道我维护一个(经过良好测试的;-)datetools模块,用于在工作中使用我的(和其他人)项目,这有很多函数来执行所有这些日历计算 - 有些是复杂的,有些简单,但没有理由一遍又一遍地完成工作(甚至是简单的工作)或冒这样计算的风险;-).
chi*_*aku 34
如果你已经在使用pandas,那很简单.
import datetime as dt
import pandas as pd
quarter = pd.Timestamp(dt.date(2016, 2, 29)).quarter
assert quarter == 1
Run Code Online (Sandbox Code Playgroud)
如果date数据框中有列,则可以轻松创建新quarter列:
df['quarter'] = df['date'].dt.quarter
Run Code Online (Sandbox Code Playgroud)
小智 27
我建议另一个可以说更清洁的解决方案.如果X是一个datetime.datetime.now()实例,则该季度为:
import math
Q=math.ceil(X.month/3.)
Run Code Online (Sandbox Code Playgroud)
ceil必须从数学模块导入,因为它无法直接访问.
对于任何试图获得会计年度的季度(可能与日历年不同)的人,我写了一个Python模块来做这件事.
安装很简单.赶紧跑:
$ pip install fiscalyear
Run Code Online (Sandbox Code Playgroud)
没有依赖关系,并且fiscalyear应该适用于Python 2和3.
它基本上是内置日期时间模块的包装器,因此datetime您熟悉的任何命令都可以使用.这是一个演示:
>>> from fiscalyear import *
>>> a = FiscalDate.today()
>>> a
FiscalDate(2017, 5, 6)
>>> a.fiscal_year
2017
>>> a.quarter
3
>>> b = FiscalYear(2017)
>>> b.start
FiscalDateTime(2016, 10, 1, 0, 0)
>>> b.end
FiscalDateTime(2017, 9, 30, 23, 59, 59)
>>> b.q3
FiscalQuarter(2017, 3)
>>> b.q3.start
FiscalDateTime(2017, 4, 1, 0, 0)
>>> b.q3.end
FiscalDateTime(2017, 6, 30, 23, 59, 59)
Run Code Online (Sandbox Code Playgroud)
fiscalyear托管在GitHub和PyPI上.可以在阅读文档中找到文档.如果您正在寻找目前没有的任何功能,请告诉我们!
这非常简单并且适用于 python3:
from datetime import datetime
# Get current date-time.
now = datetime.now()
# Determine which quarter of the year is now. Returns q1, q2, q3 or q4.
quarter_of_the_year = f'q{(now.month-1)//3+1}'
Run Code Online (Sandbox Code Playgroud)
对于那些正在使用 Pandas 寻找财政年度季度数据的人,
import datetime
import pandas as pd
today_date = datetime.date.today()
quarter = pd.PeriodIndex(today_date, freq='Q-MAR').strftime('Q%q')
Run Code Online (Sandbox Code Playgroud)
参考资料: 熊猫时期指数
此方法适用于任何映射:
month2quarter = {
1:1,2:1,3:1,
4:2,5:2,6:2,
7:3,8:3,9:3,
10:4,11:4,12:4,
}.get
Run Code Online (Sandbox Code Playgroud)
我们刚刚生成了一个函数int->int
month2quarter(9) # returns 3
Run Code Online (Sandbox Code Playgroud)
这个方法也是万无一失的
month2quarter(-1) # returns None
month2quarter('July') # returns None
Run Code Online (Sandbox Code Playgroud)
下面是一个获取 datetime.datetime 对象并为每个季度返回一个唯一字符串的函数示例:
from datetime import datetime, timedelta
def get_quarter(d):
return "Q%d_%d" % (math.ceil(d.month/3), d.year)
d = datetime.now()
print(d.strftime("%Y-%m-%d"), get_q(d))
d2 = d - timedelta(90)
print(d2.strftime("%Y-%m-%d"), get_q(d2))
d3 = d - timedelta(180 + 365)
print(d3.strftime("%Y-%m-%d"), get_q(d3))
Run Code Online (Sandbox Code Playgroud)
输出是:
2019-02-14 Q1_2019
2018-11-16 Q4_2018
2017-08-18 Q3_2017
Run Code Online (Sandbox Code Playgroud)