给定开始日期,我如何确定 Python 已经使用了多少个“工作周”?我不能只除以 7,因为那不会给我正确的答案。
例如,从 2012 年 8 月 1 日到当前日期(2012 年 8 月 13 日)的开始日期将输出 3 周。
我基本上是想从足球赛季开始就弄清楚当前周(整数)是多少。
我尝试过使用 Python 的 datetime 模块,但无济于事。
尝试使用datetime.weekday、datetime.isoweekday来获取一周中的当前日期,或者使用更完整的datetime.isocalendar来获取一年中的当前周,并使用它们作为偏移量来计算对齐的差异。
所以你可以有这样的功能:
def week_difference(start, end):
assert start <= end
start_year, start_week, start_dayofweek = start.isocalendar()
end_year, end_week, end_dayofweek = end.isocalendar()
return ((end_year - start_year) * 52) - start_week + end_week
像这样使用:
import datetime as dt
# same week
In [1]: week_difference(dt.datetime(2012, 8, 1), dt.datetime(2012, 8, 1))
Out[1]: 0
# your example (see note below)
In [2]: week_difference(dt.datetime(2012, 8, 1), dt.datetime(2012, 8, 13))
Out[2]: 2
# across years
In [3]: week_difference(dt.datetime(2011, 8, 1), dt.datetime(2012, 8, 13))
Out[3]: 54
# year boundary: second last business week of 2011, to first business week of 2012
# which is the same business week as the last business week of 2011
In [4]: week_difference(dt.datetime(2011, 12, 20), dt.datetime(2012, 1, 1))
Out[4]: 1
In [5]: week_difference(dt.datetime(2011, 12, 18), dt.datetime(2012, 1, 1))
Out[5]: 2
1
您可以根据您选择的一周差异语义添加到您的周输出中。
当你得到你的日期时间对象时......
import datetime
today = datetime.datetime.now()
start = datetime.datetime(2012, 9, 5)
...您还可以使用isocalendar ...
today.isocalendar()
>>> (2012, 33, 1)
start.isocalendar()
>>> (2012, 36, 3)
这个 3 元组返回年份、年份中的星期和星期几。如果您只关心一年,那么您可以简单地减去“一年中的一周”值(我可能会在这里减去一个......)。否则,您将需要参与其中的年份。
我的单行扩展到包括年份边界:
start_date = datetime.date(2012, 8, 1)
print ((datetime.date.isocalendar(datetime.date.today())[0]-datetime.date.isocalendar(start_date)[0])*52)+(datetime.date.isocalendar(datetime.date.today())[1]-datetime.date.isocalendar(start_date)[1])+1
>>> 3
注意:如果 start_date 在未来(从今天开始),此函数仍将返回负值!
单线:
datetime.date.isocalendar(datetime.date.today())[1] - datetime.date(2012, 8, 1).isocalendar()[1] + 1