您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch |

自学教程:Python实现周日历与时间相互转换

51自学网 2022-07-22 18:47:22
  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月举例

2021年12月

周数周一周二周三周四周五周六周日
48  12345
496789101112
5013141516171819
5120212223242526
522728293031  

2022年1月

周数周一周二周三周四周五周六周日
52     12
13456789
210111213141516
317181920212223
424252627282930
531      
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将日期转换为周日历

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,weekday    Returns:        datetime: 时间    """    year, week, weekday = isoweek    return datetime.fromisocalendar(year, week, weekday)

以上就是Python实现周日历与时间相互转换的详细内容,更多关于Python周日历与时间互换的资料请关注wanshiok.com其它相关文章!


pandas
一文详解Python如何优雅地对数据进行分组
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1