Python 小技巧:时间校正函数(校正为当月最后一日)

【实战解析】Python+OpenCV:SGBM立体匹配算法从标定到深度图生成 本文详细解析了Python+OpenCV中SGBM立体匹配算法的完整流程,从双目视觉基础到深度图生成。通过实战案例分享相机标定、图像校正、SGBM参数调优等关键步骤,帮助开发者掌握立体匹配技术。特别针对深度图优化和性能提升提供实用技巧,适用于机器人导航、工业检测等应用场景。 阅读详情

案例目的

能正确检查闰年情况(如2020年2月有29天)和各月份的不同天数(28-31天),并包含必要的错误处理。

V1.0

from datetime import datetime, timedelta

def check_last_day(date_str):
    try:
        # 将字符串解析为日期对象
        input_date = datetime.strptime(date_str, "%Y%m%d")
        
        # 计算输入日期所在月份的下个月第一天
        if input_date.month == 12:
            next_month = input_date.replace(year=input_date.year+1, month=1, day=1)
        else:
            next_month = input_date.replace(month=input_date.month+1, day=1)
        
        # 计算当月的最后一天(下个月第一天减去1天)
        last_day_of_month = next_month - timedelta(days=1)
        
        # 检查输入日期是否是当月最后一天
        if input_date.date() != last_day_of_month.date():
            print(f"Warning: {date_str} is not the last day of the month.")
    except ValueError:
        print(f"Error: Invalid date format or value: {date_str}")

函数说明

  1. 输入处理:使用 datetime.strptime 将格式为 YYYYMMDD 的字符串解析为日期对象
  2. 计算当月最后一天:
    • 计算输入日期下个月的第一天
    • 减去1天得到当月的最后一天
  3. 检查逻辑:
    • 如果输入日期等于计算出的当月最后一天 → 无输出
    • 如果不是最后一天 → 打印警告信息
  4. 错误处理:
    • 无效日期格式或非法日期值(如20251301)会触发异常并打印错误信息

V2.0

from datetime import datetime, timedelta

def check_last_day(date_str):
    try:
        input_date = datetime.strptime(date_str, "%Y%m%d")
        year, month = input_date.year, input_date.month
        
        # 计算当前月份的最后一天
        if month == 12:
            last_day = datetime(year, 12, 31)
        else:
            next_month = datetime(year, month + 1, 1)
            last_day = next_month - timedelta(days=1)
        
        # 直接比较日期对象
        if input_date != last_day:
            print(f"Warning: {date_str} is not the last day of the month.")
    except ValueError:
        print(f"Error: Invalid date format or value: {date_str}")

优化点说明:

  1. 减少对象创建:直接通过年份和月份计算最后一天,避免创建多余的日期对象。
  2. 简化逻辑:对于12月直接使用固定日期,其他月份通过计算下月第一天再减去一天得到最后一天。
  3. 直接比较:使用datetime对象直接比较,避免转换为date对象,减少转换开销。

进一步优化(避免创建next_month对象):

from datetime import datetime, timedelta

def check_last_day(date_str):
    try:
        input_date = datetime.strptime(date_str, "%Y%m%d")
        year, month = input_date.year, input_date.month
        
        if month == 12:
            last_day = datetime(year, 12, 31)
        else:
            # 计算当前月份的最后一天(通过下月第一天减1天)
            last_day = datetime(year, month + 1, 1) - timedelta(days=1)
        
        if input_date != last_day:
            print(f"Warning: {date_str} is not the last day of the month.")
    except ValueError:
        print(f"Error: Invalid date format or value: {date_str}")

V3.0

import calendar
from datetime import datetime

def check_last_day(date_str):
    try:
        input_date = datetime.strptime(date_str, "%Y%m%d")
        year, month = input_date.year, input_date.month
        _, last_day = calendar.monthrange(year, month)
        
        if input_date.day != last_day:
            print(f"Warning: {date_str} is not the last day of the month.")
    except ValueError:
        print(f"Error: Invalid date format or value: {date_str}")

最终优化的优点:

  1. 最高效:使用calendar.monthrange直接获取月份天数,无需创建任何额外日期对象。
  2. 最简洁:逻辑清晰,代码量少,直接比较日期中的天数部分。
  3. 内存占用最低:仅使用基本整数比较,无额外时间对象操作。

V3.1

import calendar
from datetime import datetime

def check_last_day(date_str):
    try:
        input_date = datetime.strptime(date_str, "%Y%m%d")
        year, month = input_date.year, input_date.month
        _, last_day = calendar.monthrange(year, month)
        
        if input_date.day != last_day:
            # 创建正确的月末日期
            correct_date = datetime(year, month, last_day)
            correct_date_str = correct_date.strftime("%Y%m%d")
            print(f"Warning: {date_str} is not the last day of the month.")
            return correct_date_str
        else:
            # print(f"{date_str} is the last day of the month.")
            return date_str  # 或者返回 None return None
    except ValueError:
        print(f"Error: Invalid date format or value: {date_str}")
        return None

V4.0

添加类型注解(-> str)本身不会直接影响内存使用,因为类型注解在运行时会被忽略(Python 3.5+ 的特性注解不会影响性能)。

import calendar

def check_last_day(date_str: str) -> str:
    """检查日期是否为月末,如果不是则返回正确的月末日期"""
    if len(date_str) != 8 or not date_str.isdigit():
        print(f"Error: Invalid date format: {date_str}")
        return ""
    
    year, month, day = int(date_str[:4]), int(date_str[4:6]), int(date_str[6:8])
    
    # 验证月份有效性
    if not 1 <= month <= 12:
        print(f"Error: Invalid month in date: {date_str}")
        return ""
    
    # 获取月份的最后一天
    _, last_day = calendar.monthrange(year, month)
    
    # 验证日期有效性
    if not 1 <= day <= last_day:
        print(f"Error: Invalid day in date: {date_str}")
        return ""
    
    if day != last_day:
        # 直接构建正确的日期字符串,避免创建datetime对象
        correct_date = f"{year:04d}{month:02d}{last_day:02d}"
        print(f"Warning: {date_str} is not the last day of the month.")
        return correct_date
    else:
        print(f"{date_str} is the last day of the month.")
        return date_str

这个优化版本的优点:

  1. 避免创建datetime对象:直接使用字符串操作和整数计算,减少内存分配
  2. 更早的错误检测:先检查格式和基本有效性,避免不必要的计算
  3. 更精确的错误处理:分别处理格式错误、月份无效和日期无效的情况
  4. 添加类型注解:提高代码可读性和可维护性(虽然不影响运行时性能)

这个版本在处理大量日期时会更加高效,特别是在内存使用方面,因为它避免了创建不必要的datetime对象。

Kendall‘s W系数实战:从理论到Python/SPSS/R实现 本文详细介绍了Kendall's W系数在评委一致性分析中的应用,从理论基础到Python、SPSS和R语言的实现方法。通过实际案例和代码示例,帮助读者掌握如何量化评委排名的一致性,适用于市场调研、学术评审和体育裁判等多个领域。 阅读详情

相关推荐

Python天文算法实战:计算与可视化冬季白昼时长变化

白昼时长是天文与气象学中的基础概念,指日出到日落的时间间隔,其变化由地球公转轨道、自转轴倾斜及观测纬度共同决定。理解其计算原理对能源规划、生态研究和日常生活均有重要价值。通过Python中的skyfield、pandas等库,可以高效实现高精度的日出日落时间计算,并利用matplotlib进行可视化分析。本文以冬季白昼时长为案例,演示了从数据获取、模型构建到图表生成的全流程,并结合纬度效应和季节定义对比,展现了数据科学在天文地理领域的典型应用场景。

weixin_34081595的博客 381

python本月最后一天怎么表示

在Python中,我们经常需要获取当前日期所在月份的最后一天。下面介绍如何使用Python获取本月最后一天的方法。我们可以使用Python内置的datetime库来获取本月最后一天的日期。# 获取当前日期# 获取下个月的第一天# 本月最后一天即下个月第一天的前一天print("本月最后一天:", last_day_of_current_month)在上面的代码中,我们首先使用获取当前日期。然后计算出下个月的第一天,即,再减去一天就得到了本月的最后一天。最后打印输出本月最后一天的日期。

牛肉胡辣汤 1515

生存函数到单点预测:三种方法的工程落地与避坑指南

生存分析中的生存函数描述了事件发生时间的概率分布,其核心原理是通过累积风险或概率积分建模时间至事件的不确定性。在实际工程中,单纯输出完整曲线难以支撑运营干预、SLA承诺或CRM系统集成,因此需将生存函数压缩为具备业务可解释性的单一时效预测值。技术价值体现在弥合统计模型与业务动作之间的‘最后一公里’断层,避免中位数失真、期望值发散或分位点错配等典型问题。典型应用场景包括客户流失预警、设备故障预测、物流时效承诺和医疗复发预判等。本文聚焦于从Kaplan-Meier与Cox模型出发,系统对比期望值、中位生存时间与

weixin_30940783的博客 564

Python 查询指定月份的最后一天

取指定月份的月末日期,monthrange()方法是Python中calendar模块的内置方法,返回一个元组,其中第一个值是指定年份和月份的月1号的星期数,第二个值是月的天数。7月1日是星期六,所以第一个值是5,7月有31天,第二个值是31。第一个值:周一是0,周二是1,周日是6。

六月闻君 2066

Python实战:基于显著性检验的海温与OLR空间相关性分析与可视化

本文详细介绍了使用Python进行海温(SST)与向外长波辐射(OLR)空间相关性分析的实战方法。通过显著性检验和空间分布可视化,帮助研究人员准确识别热带海域的气候变化关联性,提升数据分析效率与结果可靠性。

weixin_30784501的博客 481

Python实战:二维码识别与图像处理优化技巧

本文详细介绍了使用Python进行二维码识别的实战技巧,重点讲解了如何利用pyzbar和OpenCV库搭建识别环境、编写健壮脚本,并深入探讨了图像预处理、透视校正等优化方法以应对模糊、变形等复杂场景。内容涵盖从基础安装到高级应用(如实时视频流识别与批量处理),旨在帮助开发者构建鲁棒高效的二维码识别解决方案。

weixin_29085865的博客 413

python获取获得一个月中的最后一天

2022-03-31 2022-09-30

longe20111104的博客 2952

实战指南:利用Spectral Python(SPy)实现高光谱数据的机器学习分类

本文详细介绍了如何利用Spectral Python(SPy)进行高光谱数据的机器学习分类,从数据读取、预处理到监督与非监督分类实战。通过具体代码示例和农业监测案例,展示了SPy在高光谱分析中的强大功能和应用价值,帮助读者快速掌握这一高效工具。

weixin_29090089的博客 405

python得到某年某月的最后一天

整个的思路比较简单: 1. 获取指定年,指定月的总天数 2. 根据(指定的年份,指定的月份,当月总天数),就可以得到最后一天的具体日期了

呆萌的代Ma 2692

Jetson TK1时间配置:时区、RTC与NTP同步全指南

嵌入式Linux系统时间管理是保障日志可信、任务准时、多节点协同的基础能力。其核心涉及硬件时钟(RTC)、系统时钟(CLOCK_REALTIME)、时区数据库及NTP同步机制的协同工作。在无备用电池的Jetson TK1等边缘设备上,断电后RTC归零、默认时区为空、systemd-timesyncd未启用等问题极易引发时间戳错乱、ROS/Opencv时间同步失败、定时任务偏移等故障。本文围绕TK1平台,详解如何通过timedatectl统一管控时区设置、hwclock固化硬件时间、systemd-times

weixin_34409357的博客 417

APDTFlow:面向工业场景的可解释多尺度时间序列预测框架

时间序列预测本质是建模动态系统演化过程,其核心挑战在于非平稳性、多时间尺度耦合与不确定性量化。传统深度模型如Transformer常将时间视为离散token序列,忽略连续性与物理可解释性,导致在突变、不规则采样或业务归因场景中失效。APDTFlow以‘分层分解—神经ODE建模—概率融合—时序感知解码’为技术主线,将时间建模回归到微分方程驱动的连续流形学习,并通过多尺度能量守恒、事件感知分割、置信度原生输出等机制,显著提升预测鲁棒性与工程可控性。该框架特别适用于电力负荷、IoT设备预测、金融风控等需解释性、不

ajwh64482的博客 375

Python获取本月的第一天和最后一天

在工作中时常有关于时间处理的业务,比如活动的开启和结束定时,这个时候就要获取指定时间点。

qq_44914083的博客 1580

获取当月的第一天和最后一天

提供一个JS时间小插件给大家哈,用来获取当前月的第一天和最后一天,另外时间插件里还提供了其他的方法有兴趣的可以研究下

OpenCV实战:透视校正与文字增强技术解析,打造文档扫描神器(Python代码详解)

本文详细解析了如何使用OpenCV和Python实现文档扫描中的透视校正与文字增强技术。通过图像预处理、轮廓检测、角点排序和透视变换,将倾斜文档校正;并利用CLAHE、自适应二值化等方法增强文字清晰度,最终打造一个媲美商业应用的文档扫描工具。

weixin_29075633的博客 213

把群晖NAS变成游戏开发服务器:Perforce与虚幻引擎深度整合的5个关键配置(含.p4ignore模板)

本文详细介绍了如何将群晖NAS配置为游戏开发服务器,重点讲解了Perforce与虚幻引擎的深度整合。通过五个关键配置节点,包括用户权限架构、Workspace策略、资产同步优化、仓库清洁度保障和编辑器深度集成,帮助小型团队打造高效开发环境。文章还提供了实用的.p4ignore模板和优化技巧,显著提升开发效率。

weixin_30430677的博客 319

3D Slicer肺部CT病灶体积测量:阈值法实操全流程

在医学影像分析中,病灶体积的精准测量是肿瘤评估、疗效随访和科研统计的重要基础。传统逐层手动勾画不仅耗时,且主观差异大,而基于CT值的阈值分割技术,通过设定灰度区间自动提取目标体素,能够快速生成三维分割结果,具有高效、可重复、边界标准统一的优势,尤其适用于肺部实性结节这类与周围肺实质对比度高的病灶。理解体素与CT值的关系,掌握阈值范围的设定逻辑,并配合连通域分析、边缘修正等工程化操作,即可在3D Slicer中稳定获得可靠的体积数据。本文从技术原理出发,系统梳理了DICOM导入、窗宽窗位调节、阈值选择、三维重

weixin_29050271的博客 253

球谐函数实战指南:从原理到Python实现3D光照渲染

在3D图形学与实时渲染领域,高效处理复杂光照是核心挑战。球谐函数作为一组定义在球面上的正交基函数,其原理类似于将时域信号分解为不同频率正弦波的傅里叶变换,但将“舞台”扩展到了球面。它通过将球面上的复杂函数(如环境光照)投影为一组简单的系数,实现了对光照信息的压缩与高效表示。这项技术的核心价值在于“降维打击”,能将渲染方程中昂贵的球面积分计算,转化为运行时极低开销的系数点积运算,从而在实时渲染中实现柔和的全局光照和环境光遮蔽效果。其典型应用场景包括游戏中的环境光照烘焙、漫反射全局光照模拟,以及新兴的3D高斯泼

weixin_33701564的博客 373

基于Yolo11的无人机小目标检测系统的设计与性能优化改进项目实现

该项目旨在开发一个基于YOLO11的无人机目标检测系统,能够实时识别并定位无人机拍摄过程中捕捉的小目标。考虑到无人机拍摄的目标通常较小,系统将采用特定的调优策略,以提高小目标的检测精度和召回率。

m0_73723097的博客 1205

HoG(梯度直方图)原理及python实现

HoG特征的简单介绍

weixin_47289438的博客 6010

手机移动端-纯js浏览器h5调用摄像头扫描识别解析 条形码+二维码

一、场景 h5原生js 浏览器端解决识别二维码条形码功能; 不借助Hbuilder.需要自己打包成APP,比如用Hbuilder打包,浏览器端项目h5无打包成app部署X不采用 不借助微信扫一扫,调用微信js-jdk有多麻烦,还要认证服务号,也不适用其它浏览器打开X不采用 二、思路 1.思路一:input(相机拍照)+条形码或二维码识别js支持库 通过h5-input[camera]调用相机进行拍照成图片,通过条形码等识别库解析出数据; <input @cha...

徐子厚的博客 3万+

Python量化交易实战:pytdx库高效获取通达信分笔成交数据

本文详细介绍了如何使用Python的pytdx库高效获取通达信分笔成交数据,为量化交易提供关键市场微观结构分析。通过环境搭建、服务器连接、数据获取与清洗的完整流程,帮助开发者快速掌握这一免费高质量数据源,并实现分笔数据的实战分析与应用。

weixin_29061509的博客 1354

Kaggle竞赛四维解构法:指标、数据结构、时间逻辑与算力约束

Kaggle竞赛本质是真实数据场景的工程化缩影,其核心不在模型堆叠,而在对评估指标、数据组织范式、隐含时间维度和硬件约束四大基础要素的系统性理解。评估指标决定损失函数设计与后处理逻辑;文件目录结构揭示业务分组与样本独立性;时间戳、session_id或year等元信息暗含数据泄露风险,需匹配时序交叉验证;GPU配额与内存限制则倒逼模型轻量化与数据管道鲁棒性设计。掌握这四个锚点,才能摆脱kernel搬运工角色,实现从‘能跑通’到‘可复现、可解释、可部署’的跃迁——本文即以27场实战为基,拆解Kaggle竞赛底

weixin_34021089的博客 1054

Unity AR涂涂乐实战:用户上传图片秒变3D模型新皮肤(附完整代码)

本文详细介绍了如何在Unity AR应用中实现用户上传图片动态生成3D模型皮肤的功能,重点讲解了动态创建材质球的技术方案和性能优化策略。通过完整的代码示例,开发者可以学习到多源图片处理、移动端内存管理以及AR场景适配等核心技巧,快速打造高性能的儿童教育类AR应用。

weixin_31509753的博客 370

树莓派3时间同步四层加固方案:RTC+chrony+启动时序优化

实时时钟(RTC)是嵌入式设备维持准确系统时间的基础硬件模块,尤其在断电后无电池备份的场景下,时间漂移会引发日志错乱、定时任务失效、HTTPS证书校验失败等连锁问题。Linux系统通过NTP协议实现网络时间同步,但默认轻量级服务如systemd-timesyncd在低带宽、高延迟或启动时序错配环境下极易失效。本文围绕树莓派3典型时间失准问题,深入解析其BCM2837 SoC缺失RTC硬件支持的本质,并基于DS3231外置RTC、chrony高鲁棒NTP客户端、systemd启动依赖重编排及时间容错监控四大技

weixin_34348805的博客 325

AMBA-CHI协议详解(三)

Write Transactions、Atomic transactions、 Stash transactions、 Dataless transactions的等各个事务的事务流。

Crazzy_M的博客 3182

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

m0_51579041的博客 1万+
上一篇: 两个文件夹路径中文件转换规整的Python解决案例
下一篇: Python脚本运行权限问题及解决方案
偷心伊普西隆
博客等级 码龄7年 511粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值