如何使用 Python 确定从星期日开始的一年中的第几周?
How to determine the week of year starting on sunday using Python?
我需要从星期日开始计算一年中的第几周。默认的 ISO 周从星期一开始,但我的要求是星期日作为一周的开始。
例如 2019-01-06 是 星期日,应该是第 2 周。
我试过了
t1.strftime("%U")
但问题是它在第一个星期日之前的新年中的所有日子都返回 0,并从一年中的第一个星期日开始计算周数。
提前感谢您的帮助。
有点hacky,但这样就可以了:
import datetime
def week(t):
if datetime.datetime(t.year, 1, 1).weekday() == 6:
# The year started with a Sunday.
incr = 0
else:
incr = 1
return int(t.strftime("%U")) + incr
ls = [datetime.datetime(2019, 1, 5), datetime.datetime(2019, 1, 6),
datetime.datetime(2019, 8, 3), datetime.datetime(2019, 8, 4),
datetime.datetime(2017, 1, 1)]
for t in ls:
print("day:", t.strftime("%Y-%m-%d %a,"), "week:", week(t))
Output:
day: 2019-01-05 Sat, week: 1
day: 2019-01-06 Sun, week: 2
day: 2019-08-03 Sat, week: 31
day: 2019-08-04 Sun, week: 32
day: 2017-01-01 Sun, week: 1
共享我的代码,实现方式与您的稍有不同。 我考虑到一年的第一天可能属于去年的一周。不过,您可以根据自己的需要调整此代码。
下面给出的代码片段 returns year_wk 对于任何 'given_date' 和
一周从任何 day_no 开始(它是 4,即下面代码中的星期五)
import math as mt
import datetime as dt
def get_first_date_year(year, day_no):
d1 = dt.date(year, 1, 1)
return d1 + dt.timedelta((day_no - d1.weekday())%7)
def get_yearwk_from_date(given_date, day_no):
first_date = get_first_date_year(given_date.year, day_no)
if (given_date < first_date):
first_date = get_first_date_year(given_date.year-1, day_no)
return first_date.year*100 + mt.ceil(((given_date - first_date).days+1)/7)
FRIDAY = 4
for i in range(20):
given_date = dt.date(2018, 12, 23) + dt.timedelta(days=i)
year_wk = get_yearwk_from_date(given_date, FRIDAY)
print("Date: "+str(given_date)+", YearWeek: "+str(year_wk))
输出:
Date: 2018-12-23, YearWeek: 201851
Date: 2018-12-24, YearWeek: 201851
Date: 2018-12-25, YearWeek: 201851
Date: 2018-12-26, YearWeek: 201851
Date: 2018-12-27, YearWeek: 201851
Date: 2018-12-28, YearWeek: 201852
Date: 2018-12-29, YearWeek: 201852
Date: 2018-12-30, YearWeek: 201852
Date: 2018-12-31, YearWeek: 201852
Date: 2019-01-01, YearWeek: 201852
Date: 2019-01-02, YearWeek: 201852
Date: 2019-01-03, YearWeek: 201852
Date: 2019-01-04, YearWeek: 201901
Date: 2019-01-05, YearWeek: 201901
Date: 2019-01-06, YearWeek: 201901
Date: 2019-01-07, YearWeek: 201901
Date: 2019-01-08, YearWeek: 201901
Date: 2019-01-09, YearWeek: 201901
Date: 2019-01-10, YearWeek: 201901
Date: 2019-01-11, YearWeek: 201902
我需要从星期日开始计算一年中的第几周。默认的 ISO 周从星期一开始,但我的要求是星期日作为一周的开始。
例如 2019-01-06 是 星期日,应该是第 2 周。
我试过了
t1.strftime("%U")
但问题是它在第一个星期日之前的新年中的所有日子都返回 0,并从一年中的第一个星期日开始计算周数。
提前感谢您的帮助。
有点hacky,但这样就可以了:
import datetime
def week(t):
if datetime.datetime(t.year, 1, 1).weekday() == 6:
# The year started with a Sunday.
incr = 0
else:
incr = 1
return int(t.strftime("%U")) + incr
ls = [datetime.datetime(2019, 1, 5), datetime.datetime(2019, 1, 6),
datetime.datetime(2019, 8, 3), datetime.datetime(2019, 8, 4),
datetime.datetime(2017, 1, 1)]
for t in ls:
print("day:", t.strftime("%Y-%m-%d %a,"), "week:", week(t))
Output:
day: 2019-01-05 Sat, week: 1 day: 2019-01-06 Sun, week: 2 day: 2019-08-03 Sat, week: 31 day: 2019-08-04 Sun, week: 32 day: 2017-01-01 Sun, week: 1
共享我的代码,实现方式与您的稍有不同。 我考虑到一年的第一天可能属于去年的一周。不过,您可以根据自己的需要调整此代码。
下面给出的代码片段 returns year_wk 对于任何 'given_date' 和
一周从任何 day_no 开始(它是 4,即下面代码中的星期五)
import math as mt
import datetime as dt
def get_first_date_year(year, day_no):
d1 = dt.date(year, 1, 1)
return d1 + dt.timedelta((day_no - d1.weekday())%7)
def get_yearwk_from_date(given_date, day_no):
first_date = get_first_date_year(given_date.year, day_no)
if (given_date < first_date):
first_date = get_first_date_year(given_date.year-1, day_no)
return first_date.year*100 + mt.ceil(((given_date - first_date).days+1)/7)
FRIDAY = 4
for i in range(20):
given_date = dt.date(2018, 12, 23) + dt.timedelta(days=i)
year_wk = get_yearwk_from_date(given_date, FRIDAY)
print("Date: "+str(given_date)+", YearWeek: "+str(year_wk))
输出:
Date: 2018-12-23, YearWeek: 201851
Date: 2018-12-24, YearWeek: 201851
Date: 2018-12-25, YearWeek: 201851
Date: 2018-12-26, YearWeek: 201851
Date: 2018-12-27, YearWeek: 201851
Date: 2018-12-28, YearWeek: 201852
Date: 2018-12-29, YearWeek: 201852
Date: 2018-12-30, YearWeek: 201852
Date: 2018-12-31, YearWeek: 201852
Date: 2019-01-01, YearWeek: 201852
Date: 2019-01-02, YearWeek: 201852
Date: 2019-01-03, YearWeek: 201852
Date: 2019-01-04, YearWeek: 201901
Date: 2019-01-05, YearWeek: 201901
Date: 2019-01-06, YearWeek: 201901
Date: 2019-01-07, YearWeek: 201901
Date: 2019-01-08, YearWeek: 201901
Date: 2019-01-09, YearWeek: 201901
Date: 2019-01-10, YearWeek: 201901
Date: 2019-01-11, YearWeek: 201902