脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python实现周日历与时间相互转换

Python实现周日历与时间相互转换

2022-07-14 13:31万百入年许老 Python

周日历是日常生活中不常用到的历法系统,一般用于政府、商务的会计年度或者学校教学日历中。本文为大家介绍了如何利用Python语言实现周日历与时间相互转换,感兴趣的可以学习一下

前言

介绍在线周日历(2022年)

基本介绍

在开发过程中,有些汇总咨询需要以周为单位统计,所以介绍下如何进行相互转换。

使用datetime类格式化进行转换

strftime 方法可以将时间转换为字符串

strptime 方法可以将字符串转为时间

"%Y,%W,%w"中,"%Y"代表年份,"%W"代表周,"%w"代表一周内的第几天

?
1
2
3
4
5
6
7
8
9
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            
?
1
2
3
4
5
6
7
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 方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 将周日历转换为日期

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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)

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

原文链接:https://segmentfault.com/a/1190000042107154

延伸 · 阅读

精彩推荐
  • Pythonpython通过cython加密代码

    python通过cython加密代码

    这篇文章主要介绍了python通过cython实现加密的示例代码,帮助大家加密自己的python代码,提高安全性,感兴趣的朋友可以参考下...

    一个不懂代码的程序猿5322021-08-13
  • Pythonpython 中文乱码问题深入分析

    python 中文乱码问题深入分析

    一直以来,python中的中文编码就是一个极为头大的问题,经常抛出编码转换的异常,python中的str和unicode到底是一个什么东西呢? ...

    Python教程网6162020-06-27
  • PythonPython抽象类的新写法

    Python抽象类的新写法

    这篇文章主要介绍了Python抽象类的新写法,本文讲解了老版本中的hack方式实现抽象类,以及2.7以后使用abstractmethod模块写抽象类的方法,需要的朋友可以参考下...

    脚本之家2312020-07-16
  • PythonPython中的lstrip()方法使用简介

    Python中的lstrip()方法使用简介

    这篇文章主要介绍了Python中的lstrip()方法使用简介,是Python入门的基础知识,需要的朋友可以参考下 ...

    脚本之家6392020-07-01
  • Pythonpycharm配置pyqt5-tools开发环境的方法步骤

    pycharm配置pyqt5-tools开发环境的方法步骤

    这篇文章主要介绍了pycharm配置pyqt5-tools开发环境的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    水痕018462021-05-26
  • Pythonpython实现逆波兰计算表达式实例详解

    python实现逆波兰计算表达式实例详解

    这篇文章主要介绍了python实现逆波兰计算表达式的方法,较为详细的分析了逆波兰表达式的概念及实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    feige8692020-06-23
  • PythonPython 用Redis简单实现分布式爬虫的方法

    Python 用Redis简单实现分布式爬虫的方法

    本篇文章主要介绍了Python 用Redis简单实现分布式爬虫的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    zhou_19975822020-12-20
  • Pythonpython 如何区分return和yield

    python 如何区分return和yield

    这篇文章主要介绍了python 如何区分return和yield,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...

    诸子流3182020-09-23