当前位置: 首页 > news >正文

python中的WEEKNUM(ISO周数获取)

Excel中的weeknum很方便,在python中却“没有”week_num,但可以有datetime.now().isocalendar().week。


(笔记模板由python脚本于2024年10月18日 11:38:15创建,本篇笔记适合喜欢python,爱鼓捣时间对象的coder翻阅)


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


Excel的weeknum很方便
python中的weeknum
(python却“没有”,但可以自写也可调库)


本文质量分:

96 96 96

本文地址: https://blog.csdn.net/m0_57158496/article/details/143043405

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆ python中的weeknum
    • 1、问题描述
    • 2、new一个week_num
    • 3、isocalendar方法更pythonic
      • 3.1 用法示例
      • 3.2 内部样子
    • 4、日历牌
      • 4.1 time
      • 4.2 datetime
    • 5、几个“技点”
      • 5.1 周数获取
      • 5.2 格式化周几为中文字符
    • 6、总结
      • 比较datetime.timetuple和time.localtime


◆ python中的weeknum


1、问题描述


  • 题目描述截屏图片
    在这里插入图片描述
      Excel中的weeknum很方便:在单元格中填入=WEEKNUM(NOW()),就可以得到当前日期是今年第几周的整数。

Excel公式


=WEEKNUM(NOW())



回页目录


2、new一个week_num


  ISO周数计算规则: 开年第一周大于等于四天,才可以计算为当年第一周;否则将设为“上年最后一周”。换句话说就是,“元月一号”只有是周五以前,当年第一周才从元月一号起;不然当年ISO周数将从下周一起数。


week_number


def week_number(wday, yday) -> int:''' iso周数计算 '''# 本函数依赖某一天是星期几wday和是当年第x天yday作为参数,返回这一天是当前第几周return yday//7 if (yday+wday)%7 > 3 else yday//7+1

  本函数依赖某一天是星期几wday和是当年第x天yday作为参数,返回这一天是当前第几周。


完整脚本

#!/sur/bin/nve python3
from time import localtime def week_number(wday, yday) -> int:''' iso周数计算 '''# 本函数依赖某一天是星期几wday和是当年第x天yday作为参数,返回这一天是当前第几周return yday//7 if (yday+wday)%7 > 3 else yday//7+1now = localtime() # time.time()为缺省参数,等效localtime(time.time())
print(f"\n\nweek_number功能验证:\n\n函数调用代码:print(week_number({now.tm_wday}, {now.tm_yday}))\n\n输出:{week_number(now.tm_wday, now.tm_yday) = }")

输出:
在这里插入图片描述


  我的week_number的代码逻辑是“偷奸耍滑”的取巧,利用了time.localtime返回的时间元组,这不用考虑和处理闰年和数据错误等等的复杂校验,只需判定当年第一周是从“元月一号”起数还是第二周周一(也就是当年第一个周一,周一不在元月一号的情形)就好。time确保了week_number()所用参数的完全正确



回页目录


3、isocalendar方法更pythonic


  datetime.datetime.now()的isocalendar日历方法更绝,她返回的三个属性分别是year、week、weekday。`weekday’返回值是1-7,对应星期一到星期日。


3.1 用法示例



如:

#!/sur/bin/nve python3
from datetime import datetime now = datetime.now()
year, yweek, wday = now.isocalendar()
print(f"\n\n{year}年,第{yweek}周,星期{'空一二三四五六日'[wday]}\n\n")

  • 代码运行效果截屏展示
    在这里插入图片描述
      这里我对datetime.now().calendar().wday返回的1-7int当空一二三四五六日字符串的索引映射,0位用“空”占位,让一二三四五六日与返回的周几int对齐。



回页目录


3.2 内部样子


  年、周数、周几在usocalendar()对象中,就分别是yearweekweekday三个属性。


python代码


my_week = now.isocalendar()
print(f"\n\ndatetime.datetime.now().isocalendar()的样子:\n{my_week}\n\n(my_week是datetime.datetime.now()的别名)\n\n第一个值“年”:{my_week.year = }\n第二个值“周数”:{my_week.week = }\n第三个值“周几”:{my_week.weekday = }\n\n") 

  • 代码运行效果截屏展示
    在这里插入图片描述


回页目录


4、日历牌


  我分别用time和datetime做了日历牌。“日历牌”内容包含日期与时间,当前日期是今天第几天,当前日期是第几周,周几。python的这两个库各有“方便”,下面就简单展示一致代码。


  • “日历牌”效果

    命令行运行指令
    在这里插入图片描述
    程序效果
    在这里插入图片描述
      两种书写方式代码运行效果完全相同

4.1 time


  localtime返回的九位时间元组timetuple,包含了年月日时分秒、周几、当年第几天,但无周数,周数得用到前边new的week_number()


python代码

#!/sur/bin/nve python3
from time import localtime
from time import strftimedef week_number(weekday, days) -> int:''' iso周数计算 '''# 本函数依赖某一天是星期几weekday和是当年第x天days作为参数,返回这一天是当前第几周return days//7 if (days+weekday)%7 > 3 else days//7+1def main() -> None:''' 日历牌 '''CLEAR = '\033[2J' # 清屏字符串now = localtime()date_templet = f" {strftime('%Y年%m月%d日', localtime())} "time_templet = f" {strftime('(%H:%M:%S)', localtime())} "week_templet = f" 第{week_number(now[6], now[7])}周 星期{'一二三四五六日'[now[6]]} "print(f"{CLEAR}\n\n{' 日历牌 ':=^39}\n\n\n{date_templet:-^39}\n{time_templet:^42}\n\n\n{f'今天是今年第{now[7]}天':^35}\n\n\n{week_templet:-^37}\n\n\n{'':=^42}\n\n")if __name__ == '__main__':main()



回页目录


4.2 datetime


  年、周数、周几在usocalendar()对象中,就分别是yearweekweekday三个属性,可以直接取week周数属性。但这个没有当时日期是当年第几天的直接获取方法。但datetime有timetuple时间元组方法,可兼容time.localtime()。不同的是没有设定缺省参数,可以用`datetime.now()作其参数。


python代码

#!/sur/bin/nve python3
from datetime import datetimedef main() -> None:''' 日历牌 '''CLEAR = '\033[2J' # 清屏字符串today = datetime.now()week = today.isocalendar()yday = datetime.timetuple(today).tm_yday'''timetuple(...) unbound d
atetime.datetime methodReturn time tuple, compatible with tim
e.localtime().'''date_templet = f" {today.strftime('%Y年%m月%d日')} "time_templet = f" {today.strftime('(%H:%M:%S)')} "week_templet = f" 第{week.week}周 星期{'一二三四五六日'[week.weekday-1]} "print(f"{CLEAR}\n\n{' 日历牌 ':=^39}\n\n\n{date_templet:-^39}\n{time_templet:^42}\n\n\n{f'今天是今年第{yday}天':^35}\n\n\n{week_templet:-^37}\n\n\n{'':=^42}\n\n")if __name__ == '__main__':main()



回页目录


5、几个“技点”


  前面已经展示了用localtime时间元组算计iso周数,这里不再赘述。这里就讲讲datetime中周数的获取和星期几的中文字符格式化。


5.1 周数获取


  可以定义函数,可以直接读取属性,可以下标索引。


#!/sur/bin/nve python3
from datetime import datetimedef week_num():''' iso周数计算 '''year, week, weekday = datetime.now().isocalendar()return weekprint(week_num()) # 自定义函数
# 属性引用
print(datetime.now().isocalendar().week)
# 正向索引
print(datetime.now().isocalendar()[1]) 
# 逆序索引(负数索引)
print(datetime.now().isocalendar()[-2])



回页目录


5.2 格式化周几为中文字符


修正int


# 加减对齐
index = datetime.now().isocalendar().week - 1
# 模7对对齐
index = datetime.now().isocalendar().week%7
print(f"'一二三四五六日'[index]") # 将输出int对应的星期几中文字符

中文字符串补位


index = datetime.now().isocalendar().week
# 用“空”字填补0位
print(f"'空一二三四五六日'[index]") # 将输出int对应的星期几中文字符



回页目录


6、总结


  任何问题的解决都是想出来的,算法设计也可以有多种实现路径。一般选择最pythonic的一种,优雅、简洁、易于理解、总有多个途径,这是Python的一贯风格。


比较datetime.timetuple和time.localtime


  • 我的观点
    事实上datetime.now().isocalendar().week - 1datetime.now().isocalendar().week%7的效果是完全一致的,只不过是“模7”的不同书写形式而已。😎😎

  • ai回应
    您的理解是正确的。datetime.timetuple() 方法确实与 time.localtime() 方法相似,它们都返回一个表示本地时间的元组。不同之处在于 datetime.timetuple() 需要一个 datetime 对象作为参数,而 time.localtime() 可以直接使用,如果不提供任何参数,则默认使用 time.time() 的结果,即当前时间。

以下是两个方法的基本用法比较:

  • datetime.timetuple() 需要一个 datetime 对象:
import datetime# 获取当前时间的datetime对象
now = datetime.datetime.now()# 将datetime对象转换为时间元组
time_tuple = now.timetuple()
  • time.localtime() 可以直接使用,或者提供一个时间戳:
import time# 获取当前时间的本地时间元组
local_time_tuple = time.localtime()# 或者,可以提供一个时间戳
timestamp = time.time()
local_time_tuple_from_timestamp = time.localtime(timestamp)

time 模块中,localtime() 方法确实提供了便捷的方式来获取当前时间的本地表示,而 datetime 模块则需要先创建一个 datetime 对象,然后调用 timetuple() 方法。

这种设计上的差异体现了 datetime 模块更加强调面向对象的特点,而 time 模块则提供了更直接的操作方式。两者各有优势,可以根据具体的使用场景和个人偏好来选择。😄



回页首


上一篇:  候机时间计算(数学小题目,练习时间字符串“解析”)(时间字符串的简单处理,可自行解析也可以调库)
下一篇: 



我的HOT博:

  本次共计收集 311 篇博文笔记信息,总阅读量43.82w。数据于2024年03月22日 00:50:22完成采集,用时6分2.71秒。阅读量不小于6.00k的有 7 7 7篇。

  • 001
    标题:让QQ群昵称色变的神奇代码
    (浏览阅读 5.9w )
    地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    点赞:25 收藏:86 评论:17
    摘要:让QQ昵称色变的神奇代码。
    首发:2022-01-18 19:15:08
    最后编辑:2022-01-20 07:56:47

  • 002
    标题:Python列表(list)反序(降序)的7种实现方式
    (浏览阅读 1.1w )
    地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    点赞:8 收藏:35 评论:8
    摘要:Python列表(list)反序(降序)的实现方式:原址反序,list.reverse()、list.sort();遍历,全数组遍历、1/2数组遍历;新生成列表,resersed()、sorted()、负步长切片[::-1]。
    首发:2022-12-11 23:54:15
    最后编辑:2023-03-20 18:13:55

  • 003
    标题:pandas 数据类型之 DataFrame
    (浏览阅读 9.7k )
    地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    点赞:7 收藏:36 
    摘要:pandas 数据类型之 DataFrame_panda dataframe。
    首发:2022-05-01 13:20:17
    最后编辑:2022-05-08 08:46:13

  • 004
    标题:个人信息提取(字符串)
    (浏览阅读 8.2k )
    地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    点赞:2 收藏:15 
    摘要:个人信息提取(字符串)_个人信息提取python。
    首发:2022-04-18 11:07:12
    最后编辑:2022-04-20 13:17:54

  • 005
    标题:Python字符串居中显示
    (浏览阅读 7.6k )
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    评论:1

  • 006
    标题:罗马数字转换器|罗马数字生成器
    (浏览阅读 7.5k )
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    摘要:罗马数字转换器|生成器。
    首发:2022-01-19 23:26:42
    最后编辑:2022-01-21 18:37:46

  • 007
    标题:回车符、换行符和回车换行符
    (浏览阅读 6.0k )
    地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    点赞:2 收藏:3 
    摘要:回车符、换行符和回车换行符_命令行回车符。
    首发:2022-02-24 13:10:02
    最后编辑:2022-02-25 20:07:40


推荐条件 阅读量突破6.00k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    在这里插入图片描述
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)



回页首


老齐漫画头像

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


◆ Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
  • 靠谱程序员的好习惯
  • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)


http://www.mrgr.cn/news/53201.html

相关文章:

  • Oracle 使用位图索引 Cost降低200倍! 探讨位图索引的利与弊
  • 传感器黑电平箝位(Sensor black level clamping)
  • Python 处理命令行参数
  • Java 后端开发面试题及其答案
  • HTTP/HTTPS
  • 【数据结构与算法】插入排序、希尔排序
  • Oracle T5-2 ILOM配置
  • 存在重复元素 II
  • HarmonyOS NEXT和认证(在校生的大福利)
  • Pycharm下载安装教程(详细步骤)+汉化设置教程
  • 基于SSM+微信小程序的电子点餐管理系统(点餐1)
  • 【YOLO学习】YOLOv5详解
  • 【第三版 系统集成项目管理工程师】第18章 职业道德规范
  • 力扣力扣力:一文搞定前序遍历的所有方法!
  • 使用kimi编辑助手,开始搭建一个微信小程序!第一天
  • Cisco软件基础使用
  • 原型链+instanceof+Vue底层原理
  • windows无法启动RemoteDesktopServices服务(位于本地计算机上)。错误126:找不到指定的模块
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.6——函数
  • 第Y3周:yolov5s.yaml文件解读