当然我可以自己写这个,但在我重新发明轮子之前是否已经有了这个功能?
答案 0 :(得分:131)
鉴于datetime.date的实例x
,(x.month-1)//3
将为您提供季度(第一季度为0,第二季度为1,等等 - 如果您需要从1代替; - )。
最初有两个答案,即倍数上调甚至最初接受(目前都已删除),都是错误的 - 在分割前没有-1
,而是除以4而不是3.自.month
开始1到12,很容易检查自己的公式是对的:
for m in range(1, 13):
print m//4 + 1,
print
给出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
给1 1 1 2 2 2 3 3 3 4 4 4
- 现在看起来不是很适合你吗? - )
这证明了这个问题是有道理的,我认为; - )。
我不认为datetime模块应该具有所有可能的有用的日历功能,但我知道我维护了一个(经过良好测试的;-) datetools
模块供我(和其他人)使用工作中的项目,它们具有许多很少的功能来执行所有这些日历计算 - 有些很复杂,有些简单,但是没有理由一遍又一遍地完成工作(甚至是简单的工作)或者在这种计算中存在风险错误;-)
答案 1 :(得分:31)
IF 您已使用pandas
,这很简单。
import datetime as dt
import pandas as pd
quarter = pd.Timestamp(dt.date(2016, 2, 29)).quarter
assert quarter == 1
如果您在数据框中有date
列,则可以轻松创建新的quarter
列:
df['quarter'] = df['date'].dt.quarter
答案 2 :(得分:23)
我建议另一个可以说更清洁的解决方案。如果X是datetime.datetime.now()
实例,则该季度为:
import math
Q=math.ceil(X.month/3.)
ceil必须从数学模块导入,因为它无法直接访问。
答案 3 :(得分:7)
对于任何想要获得财政年度四分之一的人,可能与 calendar 年不同,我写了一个Python模块来做这件事。
安装很简单。跑吧:
$ pip install fiscalyear
没有依赖项,fiscalyear
应该适用于Python 2和3。
它基本上是内置datetime模块的包装器,因此您熟悉的任何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)
fiscalyear
托管在GitHub和PyPI上。可以在Read the Docs找到文档。如果您正在寻找目前没有的任何功能,请告诉我们!
答案 4 :(得分:2)
如果m
是月份编号...
import math
math.ceil(float(m) / 3)
答案 5 :(得分:1)
这是一个老问题,但仍值得讨论。
这是我的解决方案,使用优秀的dateutil模块。
from dateutil import rrule,relativedelta
year = this_date.year
quarters = rrule.rrule(rrule.MONTHLY,
bymonth=(1,4,7,10),
bysetpos=-1,
dtstart=datetime.datetime(year,1,1),
count=8)
first_day = quarters.before(this_date)
last_day = (quarters.after(this_date)
-relativedelta.relativedelta(days=1)
所以first_day
是本季度的第一天,last_day
是该季度的最后一天(通过查找下一季度的第一天,减去一天来计算)。
答案 6 :(得分:1)
对于那些正在寻找会计年度季度数据的人, 使用熊猫
import datetime
today_date = datetime.date.today()
quarter = pd.PeriodIndex(today_date, freq='Q-MAR').strftime('Q%q')
答案 7 :(得分:1)
我尝试了 x//3+1 和 x//4+1 的解决方案, 在任何一种情况下,我们都会得到不正确的季度。 正确答案是这样的
for i in range(1,13):
print(((i-1)//3)+1)
答案 8 :(得分:0)
first, second, third, fourth=1,2,3,4# you can make strings if you wish :)
quarterMap = {}
quarterMap.update(dict(zip((1,2,3),(first,)*3)))
quarterMap.update(dict(zip((4,5,6),(second,)*3)))
quarterMap.update(dict(zip((7,8,9),(third,)*3)))
quarterMap.update(dict(zip((10,11,12),(fourth,)*3)))
print quarterMap[6]
答案 9 :(得分:0)
这是一个详细但可读的解决方案,适用于日期时间和日期实例
def get_quarter(date):
for months, quarter in [
([1, 2, 3], 1),
([4, 5, 6], 2),
([7, 8, 9], 3),
([10, 11, 12], 4)
]:
if date.month in months:
return quarter
答案 10 :(得分:0)
此方法适用于任何映射:
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
我们刚刚生成了一个函数int->int
month2quarter(9) # returns 3
此方法也很简单
month2quarter(-1) # returns None
month2quarter('July') # returns None
答案 11 :(得分:0)
这是一个获取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))
输出为:
2019-02-14 Q1_2019
2018-11-16 Q4_2018
2017-08-18 Q3_2017
答案 12 :(得分:0)
使用字典,您可以通过
mydict2 = {k: v[1] for k, v in mydict.items()}
答案 13 :(得分:0)
这非常简单,并且可以在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 = 'q'+str((now.month-1)//3+1)
答案 14 :(得分:0)
for m in range(1, 13):
print ((m*3)//10)
答案 15 :(得分:0)
shifted = String(shiftArray)
// shifted is 'rgw myuxj veiqb diz hynoa icwe rgw kplt sif'