安全无事故连续天数计算,python 时间工具的高效利用

安全天数计算,数据系统时间直取,安全标准高效便捷好用。


笔记模板由python脚本于2025-03-17 23:50:52创建,本篇笔记适合对python时间工具有研究欲的coder翻阅。


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

博客的核心价值:在于输出思考与经验 ,而不仅仅是知识的简单复述



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

------ 华罗庚


---== 彰显C位 ==---

  1. ,可以在评论区++书写++任何想法
  2. (我将在看到的第一时间回应)
  3. (预置空地)

---== 彰显C位 ==---




数据系统时间直取 安全天数计算 安全标准高效便捷好用



本文质量分:
97 97 97
本文地址: https://blog.csdn.net/m0_57158496/article/details/146329331

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


目 录

  • ◆ 安全天数计算
    • 1、代码先睹
    • 2、算法解析
      • 2.1 Title
    • 3、完整源码(Python)

◆ 安全天数计算

1、代码先睹

  • 代码效果截屏图片

完整代码

python 复制代码
#/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**4
            	month: 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 days


def 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.month
    width = 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}")
        

2025  2025  2025


2、算法解析

解析

2.1 Title

  • 代码解析

  • 代码运行效果截屏图片

Python代码

python 复制代码

2025  2025  2025


3、完整源码(Python)

python 复制代码

2025  2025  2025


上一篇:
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篇。

  1. 让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)
  2. 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)
  3. 个人信息提取(字符串)
    地址: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)
  4. 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)
  5. 统计字符串字符出现的次数
    地址: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)
  6. 罗马数字转换器|罗马数字生成器
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    浏览阅读:8,325
    收藏:3 
    (本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)
  7. Python字符串居中显示
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    浏览阅读:8,142
    点赞:1 收藏:12 评论:1
  8. 回车符、换行符和回车换行符
    地址: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)
  9. python清屏
    地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    浏览阅读:6,232
    点赞:1 收藏:10
  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)

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


  • 截屏图片

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

2 0 2 5  2 0 2 5  2 0 2 5


精品文章:

来源: 老齐教室


Python 入门指南 【Python 3.6.3】


好文力 荐:


CSDN实用技巧博文:


相关推荐
感谢地心引力3 小时前
【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具
数据库·python·conda·pyqt·pyinstaller
xiaohanbao095 小时前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
love530love5 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
程序员晚枫6 小时前
Python 3.14正式发布!这5大新特性太炸裂了
python
先做个垃圾出来………6 小时前
SortedList
python
这里有鱼汤6 小时前
从DeepSeek到Kronos,3个原因告诉你:Kronos如何颠覆传统量化预测
后端·python·aigc
晓宜6 小时前
Java25 新特性介绍
java·python·算法
深栈6 小时前
机器学习:决策树
人工智能·python·决策树·机器学习·sklearn
MediaTea6 小时前
Python:匿名函数 lambda
开发语言·python
hui函数7 小时前
Python全栈(基础篇)——Day07:后端内容(函数的参数+递归函数+实战演示+每日一题)
后端·python