python中周日历与时间的相互转换
python中周日历与时间的相互转换
周日历(ISO国际标准)介绍基本介绍
在线周日历(2022年)
在开发过程中,有些汇总咨询需要以周为单位统计,所以介绍下如何进行相互转换。
使用datetime类格式化进行转换
- strftime 方法可以将时间转换为字符串
- strptime 方法可以将字符串转为时间
- "%Y,%W,%w"中,"%Y"代表年份,"%W"代表周,"%w"代表一周内的第几天
from datetime import datetime# 时间转周日历
a = datetime.now().strftime("%Y,%W,%w")
print(a)# 2022,28,3# 周日历转时间
a = datetime.strptime("2022,12,3","%Y,%W,%w")
print(a)# 2022-03-23 00:00:00
问题
- 以上貌似问题解决了,但是问题出在年初和年尾
- 以2021年12月,2022年1月举例
周数 | 周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 |
---|---|---|---|---|---|---|---|
48 | 1 | 2 | 3 | 4 | 5 | ||
49 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
50 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
51 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
52 | 27 | 28 | 29 | 30 | 31 |
周数 | 周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 |
---|---|---|---|---|---|---|---|
52 | 1 | 2 | |||||
1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
3 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
4 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
5 | 31 |
from datetime import datetimea = datetime.strptime("2021-12-31", "%Y-%m-%d")
print(a.strftime("%Y,%W,%w"))# 2021,52,5a = datetime.strptime("2022-01-01", "%Y-%m-%d")
print(a.strftime("%Y,%W,%w"))# 2022,00,6
- 按iso标准,2022年1月1日应该归为2021年的最后一周
- 使用strftime方法格式化后为2022年第0月,所以这是有问题的
使用isocalendar将日期转换为周日历 【python中周日历与时间的相互转换】datetime类型的时间直接调用 isocalendar 方法
from datetime import datetimedef str_to_time(time_str: str) -> datetime:
return datetime.strptime(time_str, "%Y-%m-%d")time_list = [
"2021-12-30",
"2021-12-31",
"2022-01-01",
"2022-01-02",
"2022-01-03",
]for i in time_list:
t = str_to_time(i)
iso = t.isocalendar()
print(i, " > ", f"{iso.year},{iso.week},{iso.weekday}")# 2021-12-30>2021,52,4
# 2021-12-31>2021,52,5
# 2022-01-01>2021,52,6
# 2022-01-02>2021,52,7
# 2022-01-03>2022,1,1
使用 fromisocalendar 将周日历转换为日期
from datetime import datetimetime_list = (
(2021, 52, 4),
(2021, 52, 5),
(2021, 52, 6),
(2021, 52, 7),
(2022, 1, 1),
)
for year, week, weekday in time_list:
t = datetime.fromisocalendar(year, week, weekday)
print(f"{year},{week},{weekday}", " > ", t)# 2021,52,4>2021-12-30 00:00:00
# 2021,52,5>2021-12-31 00:00:00
# 2021,52,6>2022-01-01 00:00:00
# 2021,52,7>2022-01-02 00:00:00
# 2022,1,1>2022-01-03 00:00:00
python代码
from datetime import datetimedef datetime_to_isoweek(datetime_: datetime) -> tuple[int, int, int]:
"""时间转换为iso周日历Args:
datetime_ (datetime): 时间Returns:
tuple[int,int,int]: year,week,weekday
"""
iso = datetime_.isocalendar()
return iso.year, iso.week, iso.weekdaydef isoweek_to_datetime(isoweek: tuple[int, int, int]) -> datetime:
"""iso周日历转换为时间Args:
isoweek (tuple[int,int,int]): year,week,weekdayReturns:
datetime: 时间
"""
year, week, weekday = isoweek
return datetime.fromisocalendar(year, week, weekday)
推荐阅读
- 牛客网python刷题_牛客网刷题
- 日历的实现|日历的实现 in Swift
- 如何正确使用yield()
- 开发者|Orbbec-Astra相机windows系统下Python配置使用
- 剑指Offer|牛客网——python之剑指0ffer之67道在线编程——jz21-jz25
- 剑指Offer|牛客网——python之剑指0ffer之67道在线编程——jz16-jz20
- 开发环境安装教程|Python安装教程()
- Python虚拟环境
- 从Python到水一篇AI论文(核心|从Python到水一篇AI论文(核心 or Sci三区+)
- python开发任意表达式求值全功能示例