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

目录
  • 前言
  • 基本介绍
    • 使用datetime类格式化进行转换
    • 问题
  • 正确方法
    • 使用isocalendar将日期转换为周日历
    • 使用 fromisocalendar 将周日历转换为日期
  • 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)

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

(0)

相关推荐

  • python时间与Unix时间戳相互转换方法详解

    对于时间数据,如2018-09-25 09:28:59,有时需要与Unix时间戳进行相互的运算,此时就需要对两种形式进行转换,在Python中,转换时需要用到time模块,具体的函数如下: 其中unix_time函数是正常时间转unix时间,local_time是unix时间转正常时间. import time def unix_time(dt): #转换成时间数组 timeArray = time.strptime(dt, "%Y-%m-%d %H:%M:%S") #转换成时间戳 t

  • 微信小程序可滑动周日历组件使用详解

    微信小程序可滑动周日历组件,供大家参考,具体内容如下 看网上周日历组件比较少,自己弄了一个,和大家分享一下. 如果样式变形,请检查是否有共用样式起冲突 展示一下效果图 在components组件文件夹下新建calendarWeek文件夹 直接上代码吧: index.wxml <!--components/calendarWeek/index.wxml--> <!-- 日历 --> <view class="date-choose shrink border-bott

  • python正常时间和unix时间戳相互转换的方法

    本文实例讲述了python正常时间和unix时间戳相互转换的方法.分享给大家供大家参考.具体分析如下: 这段代码可以用来转换常规时间格式为unix时间戳,也可以将unix时间戳转换回来, 例如:1332888820 格式转换成 2012-03-28 06:53:40的形式 # -*- coding: utf-8 -*- import time def timestamp_datetime(value): format = '%Y-%m-%d %H:%M:%S' # value为传入的值为时间戳(

  • 利用JavaScript实现ISO周日历

    目录 基础知识 公历 周日历 相关计算 1. 计算给定年份总周数 2. 计算当天ISO周日历表达 3. 给定某一日期,获取其ISO周日历表达方式 基础知识 阳历: 就是以太阳来计算日期的一类历法: 阴历: 就是以月亮来计算日期的一类历法: 公历: 属阳历的一种,我国现在使用的就是公历: 农历: 我国的农历是一种阴阳合历,用来指导农业十分方便. 所以,阳历.阴历是一类历法,而公历.农历是一种历法.公历和农历的表述方法也是不一样的 公历: 用阿拉伯数字,如2019年1月9日: 农历: 用汉字,干支纪

  • vue实现周日历切换效果

    本文实例为大家分享了vue实现周日历切换效果的具体代码,供大家参考,具体内容如下 废话不多说,直接上干货,需要的朋友自取 代码: <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge"

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

    目录 前言 基本介绍 使用datetime类格式化进行转换 问题 正确方法 使用isocalendar将日期转换为周日历 使用 fromisocalendar 将周日历转换为日期 python代码 前言 周日历(ISO国际标准) 介绍在线周日历(2022年) 基本介绍 在开发过程中,有些汇总咨询需要以周为单位统计,所以介绍下如何进行相互转换. 使用datetime类格式化进行转换 strftime 方法可以将时间转换为字符串 strptime 方法可以将字符串转为时间 "%Y,%W,%w&quo

  • Python Pandas高级教程之时间处理

    目录 简介 时间分类 Timestamp DatetimeIndex date_range 和 bdate_range origin 格式化 Period DateOffset 作为index 切片和完全匹配 时间序列的操作 Shifting 频率转换 Resampling 重新取样 总结 简介 时间应该是在数据处理中经常会用到的一种数据类型,除了Numpy中datetime64 和 timedelta64 这两种数据类型之外,pandas 还整合了其他python库比如  scikits.ti

  • Python实现计算两个时间之间相差天数的方法

    本文实例讲述了Python实现计算两个时间之间相差天数的方法.分享给大家供大家参考,具体如下: #-*- encoding:UTF-8 -*- from datetime import date import time nowtime = date.today() def convertstringtodate(stringtime): "把字符串类型转换为date类型" if stringtime[0:2] == "20": year=stringtime[0:4

  • 基于python实现简单日历

    本文实例为大家分享了python实现简单日历的具体代码,供大家参考,具体内容如下 首先要理清楚逻辑,日历的难点在于如何使用基础知识将周几与对应的日期进行对应,我这里利用了1917年1月1日为星期1,计算累计到我们要查询的月份的天数来确定所查询月份的第一天为周几. # 输出日历界面 print("*" * 50) print("欢迎使用[天天日历]v2.0") # 接收用户输入的年份 year_int = int(input("请输入年份:\n")

  • Python datetime和unix时间戳之间相互转换的讲解

    python datetime和unix时间戳之间相互转换 1.代码: import time import datetime # 1.datetime转unix时间戳 # (1).逐个打印 n = datetime.datetime.now() #当前时间 a = n.timetuple() b = time.mktime(a) c = int(b) # (2).链式打印 r = int(time.mktime(datetime.datetime.now().timetuple())) # 2

  • python 实现仿微信聊天时间格式化显示的代码

    时间格式化所使用的算法为: """ 1.如果不在同一年 '%Y年%m月%d日' 2.如果在同一年 2.1 如果在同一个月 2.1.1 如果在同一天 '%H:%M' 2.1.2 如果是昨天 '昨天 %H:%M' 2.1.2 如果在同一周 '周x 00:00' 去除周日 的情况 2.2 否则 '%m月%d日 %H:%M' """ 具体的python代码如下: def fmtdt_str(dtstr, fmt): result = "&quo

  • 详解Python常用标准库之时间模块time和datetime

    目录 time时间模块 time -- 获取本地时间戳 localtime -- 获取本地时间元组(UTC) gmtime -- 获取时间元组(GMT) mktime -- 时间元组获取时间戳 ctime -- 获取时间字符串 asctime -- 时间元组获取时间字符串 strftime -- 格式化时间 strptime -- 格式化时间 sleep -- 时间睡眠 perf_counter -- 时间计时 模拟进度条 程序计时 时间转换示意图 datetime时间模块 date类 time

随机推荐