我已经通过了每一个问题和每一个第三方图书馆试图找出一种方法来做到这一点,我不必手动地图日期
我正在尝试获取当前财政季度的周数。 每个季度从1月1日、4月1日、7月1日或10月1日开始
给定一个日期(字符串或对象,这无关紧要),我需要能够计算它所在财政季度的周数
更为复杂的是,财政年度从4月份开始
例如,今天,2020年7月9日是本财政季度(第2季度)的第2周,因为该季度从4月份开始。同样,2020年6月29日和30日是第一季度的第14周
大多数时间格式库,甚至是标准库都有类似ISO date的方法,我可以从中提取周数。但这是一年中第一天起的周数
我不能使用算术简单地删除当前日期的周数,因为每个季度有不同的周数。根据年份的不同,季度可以有12周、13周或14周
我得到的最接近的是使用FiscalYear库,它非常棒,因为它有一个财政季度类。不幸的是,继承的方法isoformat()不适用于它。只有FiscalDate类,它没有提供我需要的季度
有人碰到过这个吗?有人能给我指出正确的方向吗
我会发布代码片段,但这只是Python中获取当前周数的100种方法(截至今天,为28)
我试过在dateutils中使用rrules和delta,但我能得到的最接近的是使用偏移量的第一季度的周数。第二季度,它崩溃了
我很乐意使用pandas或任何其他第三方库,如果它能帮助我避免硬编码季度日期或周数到日期映射的话
如果能在正确的方向上提供帮助,我们将不胜感激
编辑:下面三个答案以不同的方式为我解决了这个问题。我很难找到正确的答案,但我给了@Paul的答案,因为这是我作为一个非高年级学生最能遵循的答案。这也是与我的个人用例(我没有提到)相匹配的答案,它接收一个datetime对象并获得结果。这就给了它优势。对不起,其他人提供了惊人的答案。我很高兴得到了代码,我所希望的只是朝着正确的方向轻推。谢谢大家。
除非这是一种非常常见的计算周数的方法,否则我不知道您是否会找到一个库来为您精确地计算周数,但是使用
dateutil
的relativedelta
和一点逻辑很容易完成。下面是一个返回元组(quarter, week)
的简单实现。由于您说过Q1从4月1日开始,我假设从1月1日到4月1日的时间段称为Q0:返回:
如果我误解了日历年的第一个季度,而实际上X年的1月1日至4月1日被视为X-1年的第四季度,那么您可以将末尾的
return quarter, week
行更改为该行(并更改返回类型注释):将返回值更改为:
如果这是一个速度瓶颈,那么编写一个不使用
dateutil.relativedelta
的优化版本应该很容易,而是根据星期几、一年中的哪一天以及这是否是闰年来计算(如果可以尽早将Python中的日历计算转换为整数操作,那么通常会更快),但我认为在大多数情况下,这个版本应该是最容易阅读和理解的如果要避免对
dateutil
的依赖,可以用简单函数替换NEXT_MONDAY
和LAST_MONDAY
:在这种情况下,将两个
_monday
变量分别指定为quarter_week_2_monday = next_monday(quarter_start)
和cur_week_monday = last_monday(dt)
注意:如果我编写这个函数,我可能不会让它返回一个简单的整数元组,而是使用attrs或dataclass创建一个简单的类,如下所示:
(请注意
slots=True
是可选的,我认为如果使用dataclasses.dataclass
则不可用-只是这是一个简单的结构,我倾向于使用slots类作为简单的结构)我认为这正是你需要的(或者至少是一个很好的开始):
印刷品:
下面是一个使用python的isocalendar库查找周数的简单解决方案:
注:本周从周一开始
产出:
相关问题 更多 >
编程相关推荐