Python實(shí)現(xiàn)周日歷與時(shí)間相互轉(zhuǎn)換
前言
基本介紹
在開發(fā)過程中,有些匯總咨詢需要以周為單位統(tǒng)計(jì),所以介紹下如何進(jìn)行相互轉(zhuǎn)換。
使用datetime類格式化進(jìn)行轉(zhuǎn)換
strftime 方法可以將時(shí)間轉(zhuǎn)換為字符串
strptime 方法可以將字符串轉(zhuǎn)為時(shí)間
"%Y,%W,%w"中,"%Y"代表年份,"%W"代表周,"%w"代表一周內(nèi)的第幾天
from datetime import datetime # 時(shí)間轉(zhuǎn)周日歷 a = datetime.now().strftime("%Y,%W,%w") print(a) # 2022,28,3 # 周日歷轉(zhuǎn)時(shí)間 a = datetime.strptime("2022,12,3","%Y,%W,%w") print(a) # 2022-03-23 00:00:00
問題
以上貌似問題解決了,但是問題出在年初和年尾
以2021年12月,2022年1月舉例
2021年12月
周數(shù) | 周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 |
---|---|---|---|---|---|---|---|
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月
周數(shù) | 周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 |
---|---|---|---|---|---|---|---|
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標(biāo)準(zhǔn),2022年1月1日應(yīng)該歸為2021年的最后一周
使用strftime方法格式化后為2022年第0月,所以這是有問題的
正確方法
使用isocalendar將日期轉(zhuǎn)換為周日歷
datetime類型的時(shí)間直接調(diào)用 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 將周日歷轉(zhuǎn)換為日期
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]: """時(shí)間轉(zhuǎn)換為iso周日歷 Args: datetime_ (datetime): 時(shí)間 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周日歷轉(zhuǎn)換為時(shí)間 Args: isoweek (tuple[int,int,int]): year,week,weekday Returns: datetime: 時(shí)間 """ year, week, weekday = isoweek return datetime.fromisocalendar(year, week, weekday)
以上就是Python實(shí)現(xiàn)周日歷與時(shí)間相互轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于Python周日歷與時(shí)間互換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實(shí)現(xiàn)冒泡排序算法的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于Python實(shí)現(xiàn)冒泡排序算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11解決Django migrate No changes detected 不能創(chuàng)建表的問題
今天小編就為大家分享一篇解決Django migrate No changes detected 不能創(chuàng)建表的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python Selenium截圖功能實(shí)現(xiàn)代碼
這篇文章主要介紹了Python Selenium截圖功能實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Python?Setuptools的?setup.py實(shí)例詳解
setup.py是一個(gè)?python?文件,它的存在表明您要安裝的模塊/包可能已經(jīng)用?Setuptools?打包和分發(fā),這是分發(fā)?Python?模塊的標(biāo)準(zhǔn)。?它的目的是正確安裝軟件,本文給大家講解Python?Setuptools的?setup.py感興趣的朋友跟隨小編一起看看吧2022-12-12Python標(biāo)準(zhǔn)庫os.path包、glob包使用實(shí)例
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫os.path包、glob包使用實(shí)例,本文直接給出代碼,代碼中有詳細(xì)注釋,需要的朋友可以參考下2014-11-11Python實(shí)現(xiàn)Wordcloud生成詞云圖的示例
這篇文章主要介紹了Python實(shí)現(xiàn)Wordcloud生成詞云圖的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Python利用psutil獲取CPU與內(nèi)存等硬件信息
psutil是Python的一個(gè)第三方庫,提供了各種強(qiáng)大的硬件信息查閱功能,這篇文章主要為大家介紹了如何利用psutil獲取CPU與內(nèi)存等硬件信息,需要的可以參考一下2023-07-07