自定义isdate函数,判定日期字符串有效性

自定义isdate函数,按日期“属性”,判定字符串日期有效性。


(笔记模板由python脚本于2024年07月05日 15:28:04创建,本篇笔记适合喜欢探究python内建模块的coder翻阅)


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

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

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


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


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


用刀耕火种的isdate函数
字符串日期判定
(按规则判定字符串日期有效性)


本文质量分:

96 96 96

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

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


目 录

  • ◆ 字符串格式日期判定
    • 1、“re残缺版”
    • 2、“升级版”
    • 3、“精华版”
    • 4、终极“温馨版”


◆ 字符串格式日期判定


1、“re残缺版”


  借助re限定了日期格式为“YYYY-MM-DD”的格式,但不可以限定年、月、日的数字范围,“年”可以是“0000”,“月”能输入13,“天”可以赋值99。很显然,这些都是不合理的违规日期格式。


re.findall验证python源代码

from re import findallif not findall(r'\d{4}-\d{2}-\d{2}', dateStr1) or not findall(r'\d{4}-\d{2}-\d{2}', dateStr2) or len(dateStr1)!=10 or len(dateStr1)!=10:raise ValueError(f"\n\n{f' 日期格式错误 ':-^36}\n\n\n{'':=^42}")

  摒弃re,直接按实际情形“手撕”搭组isdate



回页目录


2、“升级版”


  我发现,用re模块进行日期格式验证,不能全面覆盖错误情形,遂用最原始的方式分门别类逐条重写了


isdate函数python源代码


def isdate(dateStr: str) -> bool:''' 判定无效日期 '''year, month, day = map(int, dateStr.split('-')) # 日期字符串拆分、转整、赋值if 999 > year or year > 9999:return # 年份输入限定:1000 < year < 10000if month < 1 or month > 12:return # 月份输入限定:1 < month < 12if day < 1:return # 号数必须大于1if month in (1, 3, 5, 7, 8, 10, 12) and day > 31:return # 大月号数不大于31if month in (4, 6, 9, 11) and day > 30:return # 小月号数不大于30if month == 2: # 2月最大天数:平年不大于28,闰年不大于29if ((year%100 and not year%4) or not year%400) and day > 29:returnelse:if day > 28:returnreturn True

  • 找ai代劳
    在这里插入图片描述

以下是ai编撰的“代码审查”和“代码文档”



  您的 isdate函数用于判断一个日期是否有效,已经包含了基本的日期验证逻辑。下面是对该函数的审查和建议:

代码审查

  1. 日期格式检查:函数首先检查日期字符串是否符合YYYY-MM-DD的格式。
  2. 年份验证:验证年份是否在1000到9999之间。
  3. 月份和天数验证:检查月份和天数是否在有效范围内,以及是否符合每个月份的天数限制。
  4. 闰年处理:对于2月,函数检查了是否为闰年,并相应地调整了天数的限制。

    建议
  5. 代码可读性:函数中的注释可以提供更详细的说明,以便于理解和维护。
  6. 异常处理:考虑在函数内部抛出具体的错误信息,而不是简单地返回False。这样可以提供更明确的错误信息。

代码文档

isdate函数

功能:判断输入日期是否有效。

参数

  • dateStr: 日期字符串,格式为YYYY-MM-DD
    返回值
  • 如果日期有效,返回True;否则返回False

注意事项

  • 函数首先检查日期字符串的格式是否为YYYY-MM-DD
  • 年份必须在1000到9999之间。
  • 月份必须在1到12之间。
  • 天数必须符合该月的天数限制。
  • 对于2月,函数考虑了闰年的情况,并相应地调整了天数的限制。

  您的isdate函数是一个很好的起点,用于验证日期的有效性。通过添加注释和更具体的错误处理,可以使代码更加健壮和易于理解。希望这些建议对您有所帮助!



回页目录


3、“精华版”


  听取ai学习搭子的建议,认真思索过后,对代码作了必要的修正。


修正后的isdate函数python源码


def isdate(dateStr: str) -> bool:''' 判定无效日期 '''myException = ValueError(f"{' 日期格式错误 ':-^36}") # 自定义错误类型try:year, month, day = map(int, dateStr.split('-')) # 日期字符串拆分、转整、赋值raise myExceptionif 999 > year or year > 9999:raise myException # 年份输入限定:1000 < year < 10000if month < 1 or month > 12:raise myException # 月份输入限定:1 < month < 12if day < 1:raise myException # 号数必须大于1if month in (1, 3, 5, 7, 8, 10, 12) and day > 31:raise myException # 大月号数不大于31if month in (4, 6, 9, 11) and day > 30:raise myException # 小月号数不大于30if month == 2: # 2月最大天数:平年不大于28,闰年不大于29if ((year%100 and not year%4) or not year%400) and day > 29:raise myExceptionelse:if day > 28:raise myExceptionreturn True # 如无异常,返回True

  • 让ai重新审查和文档
    在这里插入图片描述

以下是ai对isdate的重新审查和撰写的代码文档



  您的 isdate函数现在使用自定义的 myException来抛出错误,这是一个很好的做法,因为它可以提供更加具体的错误信息。下面是对修正后的 isdate函数的审查和建议:


代码审查

  1. 自定义错误类型:使用自定义的myException来抛出错误,这有助于在主函数中捕获并处理这些错误。
  2. 异常处理:在每个日期验证条件之后,您都使用了raise myException,这样当任何一个条件不满足时,都会抛出自定义的错误。
  3. 日期验证逻辑:函数包含了对年份、月份、天数以及特定月份天数的有效性的验证。

建议

  1. 代码注释:在函数中添加注释,解释每个部分的作用,尤其是自定义错误类型的使用。
  2. 异常处理:在主函数中,您可以捕获myException并给出更友好的错误提示。

代码文档


功能:判断输入日期是否有效。
参数dateStr: 日期字符串,格式为YYYY-MM-DD
返回值:如果日期有效,返回True;否则返回False


注意事项

  • 函数首先检查日期字符串的格式是否为YYYY-MM-DD
  • 年份必须在1000到9999之间。
  • 月份必须在1到12之间。
  • 天数必须符合该月的天数限制。
  • 对于2月,函数考虑了闰年的情况,并相应地调整了天数的限制。
  • 如果日期无效,函数将抛出自定义的myException错误。


  您的isdate函数现在更加健壮,能够有效地验证日期的有效性。通过添加注释和更友好的错误处理,可以使代码更加易于理解和使用。希望这些建议对您有所帮助!



回页目录


4、终极“温馨版”


  通过与ai不断“对话”探讨,让我开窍,完善了一些逻辑,改写了数行代码,终究是完成了对isdate的改造。目前python水准的的我,认为是“最好的代码形式”表达了我的“算法逻辑”。拉差ai学习搭子,让它代劳了一份很棒的isdate函数的“代码文档”,方便我们理解代码渗透逻辑。


  • ai对话截屏图片
    在这里插入图片描述

isdate终极“温馨版”python 源代码


def isdate(dateStr: str) -> bool:''' 判定无效日期 '''try:year, month, day = map(int, dateStr.split('-')) # 日期字符串拆分、转整、赋值except:raise ValueError(f"{' 日期格式错误 ':-^36}") # 自定义错误if 999 > year or year > 9999:raise ValueError(f"{' 年份范围错误 ':-^36}") # 年份输入限定:1000 < year < 10000if month < 1 or month > 12:raise ValueError(f"{' 月份范围错误 ':-^36}") # 月份输入限定:1 < month < 12if day < 1:raise ValueError(f"{' 号数范围错误 ':-^36}") # 号数必须大于1if month in (1, 3, 5, 7, 8, 10, 12) and day > 31:raise ValueError(f"{' 大月号数错误 ':-^36}") # 大月号数不大于31if month in (4, 6, 9, 11) and day > 30:raise ValueError(f"{' 小月号数错误 ':-^36}") # 小月号数不大于30if month == 2: # 2月最大天数:平年不大于28,闰年不大于29if ((year%100 and not year%4) or not year%400) and day > 29:raise ValueError(f"{' 闰年2月号数错误 ':-^35}")else:if day > 28:raise ValueError(f"{' 平年2号数错误 ':-^37}")return True # 如无异常,返回True

  • ai代劳撰写的“代码文档”

    功能描述
      isdate函数用于验证输入的日期字符串是否为有效的日期。它检查日期的各个部分(年、月、日)是否在合理的范围内,并且根据月份和年份验证日期的合法性(例如,2月份的天数会根据是否为闰年而有所不同)。

    参数说明
    dateStr: str:待验证的日期字符串,格式应为"YYYY-MM-DD"。
    返回值
    1.如果日期有效,函数返回True
    2.如果日期无效,函数会抛出ValueError异常,并附带相应的错误信息。


    逻辑细节
    1.日期解析:首先,函数尝试将输入的日期字符串按照"-"分割成年、月、日的三个部分,并转换为整数。
    2.年份验证:检查年份是否在1000到9999之间。
    3.月份验证:检查月份是否在1到12之间。
    4.日期验证
     1). 对于大月(1、3、5、7、8、10、12月),日期应小于或等于31。
     2) 对于小月(4、6、9、11月),日期应小于或等于30。
     3) 对于2月,如果是闰年,日期应小于或等于29;如果是平年,日期应小于或等于28。
    5.闰年判断:年份能被4整除但不能被100整除,或者能被400整除的为闰年。

    异常处理
    1.如果日期字符串的格式不正确,或者分割后的年、月、日无法转换为整数,函数会抛出ValueError异常。
    2.如果年份、月份或日期不在有效范围内,函数也会抛出ValueError异常,并显示具体的错误信息。

使用示例

isdate("2024-07-04")  **返回 True
isdate("2024-02-29")  **返回 True,因为2024是闰年
isdate("2023-02-29")  **抛出 ValueError,因为2023不是闰年
isdate("999-12-31")   **抛出 ValueError,因为年份不在10009999之间


  这份文档详细描述了isdate函数的功能、参数、返回值和内部逻辑,以及如何处理异常情况。希望这能帮助您更好地理解和使用这个函数。



回页首


上一篇:  驱使ai学习搭子,写出一份“完美”的代码“文档”(自己把控“核心关键”,ai会把文档写得比您预想的“完美”)
下一篇: 



我的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.xdnf.cn/news/1473959.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

One day for Chinese families

周围生活中的普通家庭的一天流程&#xff1a; 【上班的一天】 【放假的一天】 有家庭的人&#xff0c;上班流程&#xff1a; 01&#xff09;准备早餐&#xff0c;牛奶&#xff0c;面包 02&#xff09;叫娃娃起床&#xff0c;一般要蛮久的&#xff1b;沟通交流 -- 哄娃娃 -- 生气…

2-5 softmax 回归的简洁实现

我们发现通过深度学习框架的高级API能够使实现线性回归变得更加容易。 同样&#xff0c;通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在上节中一样&#xff0c; 继续使用Fashion-MNIST数据集&#xff0c;并保持批量大小为256。 import torch from torc…

Linux操作系统的引导过程

系统初始化进程与文件、systemd概述、单元类型、切换运行级别、查看系统默认默认运行、永久切换、常见的系统服务&#xff08;centos&#xff09;-CSDN博客 centos 7系统升级内核&#xff08;ELRepo仓库&#xff09;、小版本升级、自编译内核-CSDN博客 ss命令详细使用讲解文…

微积分-导数4(三角函数的导数)

证明 f ( x ) sin ⁡ x f(x) \sin x f(x)sinx的导数为 f ′ ( x ) cos ⁡ x f(x) \cos x f′(x)cosx 已知函数 f ( x ) sin ⁡ x f(x) \sin x f(x)sinx 画出 f ( x ) f(x) f(x)图像以及 f ′ ( x ) f(x) f′(x)的图像 因此&#xff0c;我们可以合理的猜测&#xff1a;…

每日一题~ (判断是否是合法的出栈序列)

大概的题意&#xff1a; 将 1-n 按照顺序进栈&#xff0c;问 输入的序列是否是合法的出栈序列。 遍历序列&#xff0c;如果当前这个值a小于 栈顶的值&#xff0c;说明它还未进栈&#xff08;因为我们是按照顺序进栈的&#xff09;&#xff0c;所以我们将 一些元素进栈&#xff…

最短路:Dijkstra

原始模板&#xff1a; 时间复杂度O() 使用于图很满的情况 struct Node{int y,v;Node(int _y,int _v){y_y;v_v;} };vector<Node> edge[N1]; int n,m,dist[N1]; bool b[N1];int Dijistra(int s,int t){memset(b,false,sizeof(b));memset(dist,127,sizeof(dist));dist[s]…

Linux开发讲课33---线程实现与线程控制步骤简析

线程概述 进程是系统中程序执行和资源分配的基本单位。 每个进程都拥有自己的数据段、代码段和堆栈段&#xff0c;这就造成了进程在进行切换等操作时都需要有比较负责的上下文切换等动作。为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销&#xff0c;进程在演…

第5章 认证授权:需求分析,Security介绍(OAuth2,JWT),用户认证,微信扫码登录,用户授权

1 模块需求分析 1.1 什么是认证授权 截至目前&#xff0c;项目已经完成了课程发布功能&#xff0c;课程发布后用户通过在线学习页面点播视频进行学习。如何去记录学生的学习过程呢&#xff1f;要想掌握学生的学习情况就需要知道用户的身份信息&#xff0c;记录哪个用户在什么…

工作手机怎么做好业务员工作微信的监控管理

什么是工作手机管理系统&#xff1f; 工作手机管理系统是专为企业管理设计的员工微信管理&#xff0c;它通过监控通讯记录、保障数据安全、自动检测敏感行为、永久保留客户信息等功能&#xff0c;帮助企业提升销售效率、维护客户资源安全&#xff0c;并确保业务流程的合规性。…

自动化设备上位机设计 三

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using SqlSugar;namespace 自动化上位机设计 {public partial class Form1 : Form{SqlHelper sqlHelper new SqlHelper();SqlSugarClient dbContent null;bool IsRun false;int Count 0;public Form1(){Initializ…

奇景光电战略投资Obsidian,共筑热成像技术新未来

5月29日,业界领先的IC设计公司奇景光电宣布,将对热成像传感器解决方案制造商Obsidian进行战略性投资,并以主要投资者的身份,参与到Obsidian的可转换票据融资活动中。虽然奇景光电并未公开具体的投资金额,但这一举动无疑向市场传递了一个明确的信号:奇景光电对Obsidian的技…

深度学习:为什么说英伟达A100或RTX A6000等专业GPU比RTX 4090更适合深度学习呢?

目录 一、关键术语 CUDA cores&#xff08;CUDA内核&#xff09;&#xff1a; memory bandwidth&#xff08;内存带宽&#xff09;&#xff1a; 二、深度学习的显卡硬件要求 三、NVIDIA显卡A100、RTX A6000和RTX 4090对比 1、NVIDIA A100 2、NVIDIA RTX A6000 3、NVIDI…

方法引用 异常 file

一.方法引用 1.方法引用概述 eg: 表示引用run1类里面的sxxxx方法 把这个方法当做抽象方法的方法体 &#xff1a;&#xff1a;是方法引用符 //方法引用Integer[] arr{4,3,1,6,2,7,8,5};Arrays.sort(arr,run1::subtraction);System.out.println(Arrays.toString(arr));}publi…

AI老照片生成视频

地址&#xff1a;AI老照片 让你的图片动起来, 老照片修复与动态化

HTTP-概述

概念 :Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 原始数据格式 特点 1. 基于TCP协议:面向连接&#xff0c;安全&#xff08;三次握手&#xff09; 2. 基于请求-响应模型的:一次请求对应一次响应&#xf…

R语言4.3.0保姆级安装教程,包含安装包

[软件名称]&#xff1a;R语言4.3.0 R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件&#xff0c;它是一个用于统计计算和统计制图的优秀工具。 获取链接: https://pan.quark.cn/s/180306f47179 安装步骤: 1.解压压缩包。 2.进入…

【代码随想录】【算法训练营】【第60天】 [卡码107]寻找存在的路径

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 60&#xff0c;周六&#xff0c;ding ding~ 题目详情 [卡码107] 寻找存在的路径 题目描述 卡码107 寻找存在的路径 LeetCode类似题目1971 寻找图中是否存在路径 解题思路 前提&#xff1a; 思…

【深海王国】小学生都能玩的语音模块?ASRPRO打造你的第一个智能语音助手(7)

Hi~ (o^^o)♪, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω) 今天大都督继续为大家带来系列——小学生都能玩的语音模块&#xff0c;帮你一周内快速学会语音模块的使用方式&#xff0c;打造一个可用于智能家居、物联网领域的语音助…

ONLYOFFICE最新8.1版本——桌面编辑器简单测评

前言 大家好&#xff0c;我是小雨&#xff0c;看到最近ONLYOFFICE更新了最新的版本&#xff0c;更新了一下当前版本来具体的测评一下&#xff0c;先来看看官网提供的各类更新信息&#xff0c;下面是我找到的三个主页&#xff0c;包括功能演示链接&#xff0c;官网连接以及专门…

农业自动气象监测站:现代农业的智能化守护者

在科技日益发展的今天&#xff0c;农业领域正迎来一场深刻的变革。在这场变革中&#xff0c;农业自动气象监测站以其独特的智能化、自动化功能&#xff0c;成为了现代农业的守护者。 农业自动气象监测站&#xff0c;顾名思义&#xff0c;是一种能够自动监测和记录农田气象数据的…