• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python中周日历与时间的相互转换

python 搞java代码 3年前 (2022-07-26) 49次浏览 已收录 0个评论
文章目录[隐藏]

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 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

2022年1月

周数 周一 周二 周三 周四 周五 周六 周日
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 datetime

a = datetime.strptime("2021-12-31", "%Y-%m-%d")
print(a.strftime("%Y,%W,%w"))   # 2021,52,5

a = 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 datetime


def 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 datetime

time_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 datetime


def 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.weekday


def 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)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python中周日历与时间的相互转换
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址