安全无事故连续天数计算,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实用技巧博文:


相关推荐
搬砖班班长1 分钟前
conda报错activate没办法激活环境
开发语言·python·conda
Vertira13 分钟前
pytorch 网络结构可视化Netron安装使用方法(已解决)
人工智能·pytorch·python
带鱼工作室39 分钟前
cuda12.4安装tensorflow-gpu 2.18.0
人工智能·python·tensorflow
GIS思维44 分钟前
ArcGIS10.X影像智能下载!迁移ArcGIS Pro批量智能高清影像下载工具至ArcGIS!
python·arcgis·arcgis pro·deepseek·高清影像下载·谷歌影像·天地图影像
web安全工具库1 小时前
UDP数据发送与接收详解
python
韶瑜不会写代码2 小时前
7-14 利用正则表达式得到一段HTML文本中所有超链接对应的网址
python·正则表达式·html
大模型铲屎官3 小时前
从过拟合到强化学习:机器学习核心知识全解析
人工智能·python·机器学习·llm·scikit-learn·强化学习·过拟合
java1234_小锋3 小时前
一周学会Flask3 Python Web开发-SQLAlchemy添加数据操作-班级模块
开发语言·前端·python·flask·flask3
补三补四3 小时前
网络爬虫【爬虫库urllib】
爬虫·python·网络爬虫
帅帅的Python3 小时前
基于Python的tkinter开发的一个工具,解析图片文件名并将数据自动化导出为Excel文件
python·自动化·excel