安全天数计算,数据系统时间直取,安全标准高效便捷好用。
笔记模板由python脚本于2025-03-17 23:50:52创建,本篇笔记适合对python时间工具有研究欲的coder翻阅。
博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述。
-
Python官网:
这里,才 python 前沿。英文原版,原汁原味,才是寻根溯源的正统。😎
地址:https://www.python.org/ -
Free:
大咖免费“圣级”秘笈《 python 完全自学教程》不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间,总是比在学校学习的时间长;没有老师的时候总是比有老师的时候多。
—— 华罗庚
-
您,可以在评论区书写任何想法 -
(我将在看到的第一时间回应) -
(预置空地)

本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/146329331
CSDN质量分查询入口:http://www.csdn.net/qc
目 录
- ◆ 安全天数计算
- 1、代码先睹
- 2、算法解析
- 2.1 Title
- 3、完整源码(Python)
◆ 安全天数计算
1、代码先睹
代码效果截屏图片
完整代码
#/usr/bin/env python3
from datetime import datetime, timedelta
import calendar'''filename: yday.py功能函数小练习:指定月份公历月历打印、
自定义九位时间数组(year, month, day, hour, minute, second, week, wday, yday)、
连续安全日计算(上次安全事故到指定日期天数)'''# Base Var #
blue = '\033[34m'
lightgreen = '\033[32;1m'
gray = '\033[37;2m'
resetcolor = '\033[0m'def get_monthcalendar_line(date: tuple, width: int = 33 ) -> str:''' 月历文本行数据获取:(直接获取月历文本数据)date: (year: int, 999 < y < 10**4month: int 1-12)width: 月历打印宽度'''text = calendar.TextCalendar().formatmonth(*date).split('\n')[2:-1] # 取月历文本行text[-1] = text[-1] + ' ' * (20 - len(text[-1]))return '\n'.join([f"{line:^{width}}" for line in text]) # 这种单独处理最后一周的方式更pythonic,保留先前的实现,留置“警醒”:代码没有最好只有更好!😎blank = ''return '\n'.join([f"{line:^{width}}" if len(line) == 20 else f"{f'{line}{blank:>{20 - len(line)}}':^{width}}" for line in text]) # 这行代码永不执行,留下它作个见证——“还有一种对齐方式”def get_safedays(safestart: list | tuple = None, date: list | tuple = None) -> int:''' 计算年内连续安全无事故天数 '''date = datetime(*date) if date else datetime.today()safestart = datetime(*safestart) + timedelta(days=1) if safestart else datetime(date.year, 1, 1)days = (date - (safestart)).days # 计算日期区间不含当天,本就是两个日期差值;不同于datetime.today().tupletime().tm_yday,含当前日期天数;由于安全日计算是基于上次安全事故日,次日起才是安全日,在此减一修正操作相对简单(逻辑依旧清晰),但直接处理safestart才是最最明晰的逻辑,所以又改了。if days < 0:raise ValueError(f"{f' 日期设置错误 ':-^{width - 6}}")return daysdef strfcalendar(data: list | tuple, width: int = 42) -> str:'''日历牌模板:默认格式宽度42半角字符data =year, month, day, hour, minute, second, yweek, wday, yday(自定义九位时间数组序列,可列表可元组)'''title = f"\n{blue}\n{' 日历牌 ':=^{width - 3}}\n{resetcolor}\n"strfdate = f"{lightgreen}{' {}年{:02d}月{:02d}日 '.format(*data[:3]):-^{width - 3}}{resetcolor}"timeinfo = ':'.join([f"{time:02d}" for time in data[3:6]]) # 时分秒格式化strftime = f"{gray}{f' 现在 {timeinfo} ':-^{width - 2}}{resetcolor}"weekinfo = f" 第{data[-3]:02d}周 星期{'一二三四五六日'[data[-2] ]} "strfweek = f"{lightgreen}{weekinfo:-^{width - 5}}{resetcolor}"strfyday = f"{gray}{f' 当年第{data[-1]}天 ':-^{width - 4}}{resetcolor}"end = f"\n{blue}\n{'':=^{width}}{resetcolor}"return '\n\n'.join((title, strfdate, strftime, strfweek, strfyday, end)) # str.join组合日历牌格式文本返回def get_calendar_data() -> list:''' 获取当前日期数据:直接内库获取九位时间数组,time.localtime | datetime.datetime双剑合璧 '''date = list(datetime.now().timetuple()[:8]) # 取8位时间数组date.insert(-2, datetime.now().isocalendar().week) # 插入yweek,一年中的当前iso国际标准周数return date # 返回自定义九位时间数组if __name__ == '__main__':today = datetime.today()date = today.year, today.monthwidth = 42# 两个途径获取格式化月历文本,效果相同 #text = get_monthcalendar_line(date, width)print(f"\n\n{f' {date[0]}年{date[-1]:02d}月 ':=^{width - 2}}"f"\n\n{' '.join('一二三四五六日'):^{width - 7}}"f"\n{text}"f"\n\n{'':=^{width}}")print(strfcalendar(get_calendar_data())) safestart = 2025, 3, 14 # 最后一次安全事故#safestart = () # 最后一次安全事故(可以为空)try:print(f"\n\n{' 部门安全告示牌 ':*^{width - 7}}"f"\n\n{lightgreen}\n{f' 已安全无事故{get_safedays(safestart):03d}天 ':^{width - 7}}{resetcolor}"f"\n\n\n{'':*^{42}}") except ValueError as e:print(f"\n\n触发错误:\n\n{e}")except Exception as e:print(f"\n\n其它错误:\n\n{e}")
2、算法解析
解析
2.1 Title
代码解析
代码运行效果截屏图片
Python代码
3、完整源码(Python)
上一篇:
Python的字符串优雅优化策略:特定编码 -> Unicode码点 -> UTF-8(可自定义)(Python利用唯一uni-pot中介打理,任意制式输出(首选uyf-8))
我的HOT博:
本次共计收集441篇博文笔记信息,总阅读量68.56w。数据采集于2025年01月25日 22:57:22,用时9分29.3秒。阅读量不小于6.00k的有 10 10 10篇。
- 让QQ群昵称色变的神奇代码
地址:https://blog.csdn.net/m0_57158496/article/details/122566500
浏览阅读:62,785
点赞:25 收藏:89 评论:17
(本篇笔记于2022-01-18 19:15:08首次发布,最后修改于2022-01-20 07:56:47)
- Python列表(list)反序(降序)的7种实现方式
地址:https://blog.csdn.net/m0_57158496/article/details/128271700
浏览阅读:14,096
点赞:9 收藏:40 评论:8
(本篇笔记于2022-12-11 23:54:15首次发布,最后修改于2023-03-20 18:13:55)
- 个人信息提取(字符串)
地址:https://blog.csdn.net/m0_57158496/article/details/124244618
浏览阅读:10,412
点赞:3 收藏:21
(本篇笔记于2022-04-18 11:07:12首次发布,最后修改于2022-04-20 13:17:54)
- pandas 数据类型之 DataFrame
地址:https://blog.csdn.net/m0_57158496/article/details/124525814
浏览阅读:10,318
点赞:7 收藏:40
(本篇笔记于2022-05-01 13:20:17首次发布,最后修改于2022-05-08 08:46:13)
- 统计字符串字符出现的次数
地址:https://blog.csdn.net/m0_57158496/article/details/130517025
浏览阅读:8,471
点赞:5 收藏:27
(本篇笔记于2023-05-06 22:28:18首次发布,最后修改于2023-05-12 06:21:40)
- 罗马数字转换器|罗马数字生成器
地址:https://blog.csdn.net/m0_57158496/article/details/122592047
浏览阅读:8,325
收藏:3
(本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)
- Python字符串居中显示
地址:https://blog.csdn.net/m0_57158496/article/details/122163023
浏览阅读:8,142
点赞:1 收藏:12 评论:1
- 回车符、换行符和回车换行符
地址:https://blog.csdn.net/m0_57158496/article/details/123109488
浏览阅读:6,867
点赞:2 收藏:4
(本篇笔记于2022-02-24 13:10:02首次发布,最后修改于2022-02-25 20:07:40)
- python清屏
地址:https://blog.csdn.net/m0_57158496/article/details/120762101
浏览阅读:6,232
点赞:1 收藏:10
- 我的 Python.color() (Python 色彩打印控制)
地址:https://blog.csdn.net/m0_57158496/article/details/123194259
浏览阅读:6,099
点赞:2 收藏:9
(本篇笔记于2022-02-28 22:46:21首次发布,最后修改于2022-03-03 10:30:03)
截屏图片
(此文涉及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规范(说明文档的规范写法)