我正在尝试根据今天的日期获取财政年度的开始日期。
因此,经过一番研究,我发现此软件包名为fiscalyear
,您可以在其中修改会计年度的开始日期。就我而言,我希望 01-07-year
作为会计年度的开始日期,因此我将fiscalyear.START_MONTH = 7
我尝试了以下方法(如果您pip install fiscalyear
,则是可重复的示例):
import datetime
import fiscalyear
fiscalyear.START_MONTH = 7
a = fiscalyear.FiscalYear(datetime.datetime.now().year).start.date()
a.strftime('%Y-%m-%d')
哪些输出正确:
'2018-07-01'
但是,由于月份datetime.datetime.now().year
不变,因此当月份变为8月时,这将不起作用。所以我尝试做类似的事情:
if (datetime.datetime.now()-pd.to_datetime('2018-07-01')).days < 365:
a = fiscalyear.FiscalYear(datetime.datetime.now().year).start.date()
print(a.strftime('%Y-%m-%d'))
else:
a = fiscalyear.FiscalYear(datetime.datetime.now().year+1).start.date()
print(a.strftime('%Y-%m-%d'))
我对自己正在做的事情有不好的感觉,因为这现在也可能适用于leap年。
在python中是否有更好的方法可以根据当前时间戳检测会计年度的开始日期?
py版本:3.6.7
答案 0 :(得分:4)
我在财政领域的知识接近 0 ,但是根据https://docs.developer.swisscom.com/concepts/container-security.html:
FiscalYear
类提供了一个对象,用于存储有关特定会计年度开始和结束的信息。...
每个季度的开始和结束都存储为
FiscalDateTime
类的实例。本课程提供所有 与datetime
类具有相同的功能,并具有查询会计年度和季度的功能
因此, FiscalYear 不能与日期一起使用,而是 FiscalDateTime (或更简单的兄弟姐妹: FiscalDate )。>
>>> import fiscalyear >>> fiscalyear.START_MONTH = 7 >>> >>> cur_y = fiscalyear.FiscalYear(datetime.datetime.now().year) >>> cur_y.start.date() datetime.date(2018, 7, 1) >>> cur_y.end.date() datetime.date(2019, 6, 30) >>> >>> cur_dt = fiscalyear.FiscalDate(2019, 2, 19) # Current date (at answer time) >>> cur_dt.fiscal_year 2019 >>> >>> jul_dt = fiscalyear.FiscalDate(2019, 7, 19) # A date past July 1st (when the fiscal year should change) >>> jul_dt.fiscal_year 2020
答案 1 :(得分:3)
您可以尝试以下代码,它对我有用:
>>> import fiscalyear
>>> fiscalyear.START_MONTH = 4
>>> fiscalyear.FiscalYear.current()
FiscalYear(2021)
>>>
答案 2 :(得分:1)
我认为您需要searchsorted
和助手DatetimeIndex
:
r = pd.to_datetime([f'{x}-06-30' for x in range(1970, 2021)])
#print (r)
for x in ['2017-07-01','2017-07-02','2018-06-30','2019-02-19','2019-08-19']:
out = (r[r.searchsorted(pd.Timestamp(x))] + pd.Timedelta(1, 'd')).year
print (out)
2018
2018
2018
2019
2020
答案 3 :(得分:0)
获取示例数据框:
pd.DataFrame(dict(
dates=[pd.datetime(2018, 6, 1), pd.datetime(2018, 7, 1), pd.datetime(2018, 7, 2)],
values=[0]*3
))
dates values
0 2018-06-01 0
1 2018-07-01 0
2 2018-07-02 0
...从7月1日开始,我一直使用pd.Grouper()
将它们归类,其中键为AS-JUL
,即“每年7月开始”
df.groupby(pd.Grouper(freq='AS-JUL', key='dates')).count()
values
values
dates
2017-07-01 1
2018-07-01 2
您可以在此处看到2018-07-01
在操作后仍为2018-07-01