Python實現(xiàn)周日歷與時間相互轉(zhuǎn)換
周日歷(ISO國際標準)
介紹在線周日歷(2022年)
基本介紹
在開發(fā)過程中,有些匯總咨詢需要以周為單位統(tǒng)計,所以介紹下如何進行相互轉(zhuǎn)換。
使用datetime類格式化進行轉(zhuǎn)換
strftime 方法可以將時間轉(zhuǎn)換為字符串
strptime 方法可以將字符串轉(zhuǎn)為時間
"%Y,%W,%w"中,"%Y"代表年份,"%W"代表周,"%w"代表一周內(nèi)的第幾天
from datetime import datetime
# 時間轉(zhuǎn)周日歷
a = datetime.now().strftime("%Y,%W,%w")
print(a) # 2022,28,3
# 周日歷轉(zhuǎn)時間
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標準,2022年1月1日應(yīng)該歸為2021年的最后一周
使用strftime方法格式化后為2022年第0月,所以這是有問題的
正確方法
使用isocalendar將日期轉(zhuǎn)換為周日歷
datetime類型的時間直接調(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:00python代碼
from datetime import datetime def datetime_to_isoweek(datetime_: datetime) -> tuple[int, int, int]: """時間轉(zhuǎn)換為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周日歷轉(zhuǎn)換為時間 Args: isoweek (tuple[int,int,int]): year,week,weekday Returns: datetime: 時間 """ year, week, weekday = isoweek return datetime.fromisocalendar(year, week, weekday)
以上就是Python實現(xiàn)周日歷與時間相互轉(zhuǎn)換的詳細內(nèi)容,更多關(guān)于Python周日歷與時間互換的資料請關(guān)注本站其它相關(guān)文章!
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信