百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

python时间操作,最全封装,各种年月日加减、转换、获取

itomcoil 2024-12-07 13:25 82 浏览

哈喽,我给大家封装了时间操作的工具,包含 年、月、日、时、分、秒增加指定时间,数字转换成时间,获取指定时间的年、月、日、时、分、秒,以及计算年月日的差值等,全网最全

附源码,复制后即可引用。

先看几个演示:

1、增加指定天数

class DateTimeTools():
       #.................   此处省去其他函数
    def addDay(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定天数,月、年自动递增/减(天数为负数时,天数相减)
        用       法:addDay(日期,天数)
        示       例:假设日期值为2020-10-15,addDay(日期,5) => 2021-06-30
        """
        newDate = date.strptime(str(dateparam), "%Y-%m-%d").date() + datetime.timedelta(days=number)
        return newDate
print(DateTimeTools().addDay("2021-06-25",5))
输出:
2021-06-30

2、增加指定月数

class DateTimeTools():
       #.................   此处省去其他函数
    def addMonth(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定月数,年份自动递增/减(月数为负数时,月份相减)
        用       法:addMonth(日期,月数)
        示       例:假设日期值为2021-06-25,addMonth(日期,5) => 2021-11-25
        """
        newDate = date.strptime(str(dateparam), "%Y-%m-%d").date() + relativedelta(months=number)
        return newDate
print(DateTimeTools().addMonth("2021-06-25",5))
输出:
2021-11-25

3、增加指定年数

class DateTimeTools():     
    #.................   此处省去其他函数
    def addYear(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定年数,年份自动递增/减(年数为负数时,年份相减)
        用       法:addYear(日期,年数)
        示       例:假设日期值为2021-06-25,addYear(日期,5) => 2026-06-25
        """
        newDate = date.strptime(str(dateparam), "%Y-%m-%d").date() + relativedelta(years=number)
        return newDate
print(DateTimeTools().addMonth("2021-06-25",5))
输出:
026-06-25

4、增加指定小时数

class DateTimeTools():     
    #.................   此处省去其他函数
     def addHour(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定小时数,天自动递增/减(小时为负数时,小时相减)
        用       法:addHour(日期,小时数)
        示       例:假设日期值为2021-06-25 15:12:42,addHour(日期,5) => 2021-06-25 20:12:42
        """
        try:
            newDate = date.strptime(str(dateparam), "%Y-%m-%d %H:%M:%S") + datetime.timedelta(hours=number)
            return newDate
        except ValueError:
            raise ValueError("日期格式需为:%Y-%m-%d %H:%M:%S")
print(DateTimeTools().addHour("2021-06-25 15:12:42",5))
输出:
2021-06-25 20:12:42

5、计算2日期年数差值

class DateTimeTools():     
    #.................   此处省去其他函数
     def get_subtractYear(self,date1,date2):
        """
        函数描述:获取年的差值(日期A,日期B),单位:年
        用       法:get_subtractYear(日期A,日期B)
        示       例:假设日期A为2021-06-25,日期B为2023-06-26  get_subtractYear(日期A,日期B)=> 2.0
        
        """
        newDate = abs(date.strptime(date1,"%Y-%m-%d") - date.strptime(date2,"%Y-%m-%d")).days / 365
        return  round(newDate,2) 
print(DateTimeTools().get_subtractYear("2021-06-25","2023-06-26"))
输出:
2.0

后面还有很多实用的方法,我就不一一展示了,需要的自取,下面附源码:

import datetime
from datetime import datetime as  date
from dateutil.relativedelta import relativedelta


class DateTimeTools():

    def addDay(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定天数,月、年自动递增/减(天数为负数时,天数相减)
        用       法:addDay(日期,天数)
        示       例:假设日期值为2021-06-25,addDay(日期,5) => 2021-06-30
        """
        newDate = date.strptime(str(dateparam), "%Y-%m-%d").date() + datetime.timedelta(days=number)
        return newDate
    def addMonth(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定月数,年份自动递增/减(月数为负数时,月份相减)
        用       法:addMonth(日期,月数)
        示       例:假设日期值为2021-06-25,addMonth(日期,5) => 2021-11-25
        """
        newDate = date.strptime(str(dateparam), "%Y-%m-%d").date() + relativedelta(months=number)
        return newDate
    def addYear(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定年数,年份自动递增/减(年数为负数时,年份相减)
        用       法:addYear(日期,年数)
        示       例:假设日期值为2021-06-25,addYear(日期,5) => 2026-06-25
        """
        newDate = date.strptime(str(dateparam), "%Y-%m-%d").date() + relativedelta(years=number)
        return newDate
    def addHour(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定小时数,天自动递增/减(小时为负数时,小时相减)
        用       法:addHour(日期,小时数)
        示       例:假设日期值为2021-06-25 15:12:42,addHour(日期,5) => 2021-06-25 20:12:42
        """
        try:
            newDate = date.strptime(str(dateparam), "%Y-%m-%d %H:%M:%S") + datetime.timedelta(hours=number)
            return newDate
        except ValueError:
            raise ValueError("日期格式需为:%Y-%m-%d %H:%M:%S")
    def addMinutes(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定分钟数,小时自动递增/减(分钟为负数时,分钟相减)
        用       法:addMinutes(日期,小时数)
        示       例:假设日期值为2021-06-25 15:12:42,addMinutes(日期,2) => 2021-06-25 15:14:42
        """
        try:
            newDate = date.strptime(str(dateparam), "%Y-%m-%d %H:%M:%S") + datetime.timedelta(minutes=number)
            return newDate
        except ValueError:
            raise ValueError("日期格式需为:%Y-%m-%d %H:%M:%S")
    def addSeconds(self,dateparam,number):
        """
        函数描述:
        将指定日期加/减指定分钟数,小时自动递增/减(分钟为负数时,分钟相减)
        用       法:addMinutes(日期,小时数)
        示       例:假设日期值为2021-06-25 15:12:42,addMinutes(日期,10) => 2021-06-25 15:12:52
        """
        try:
            newDate = date.strptime(str(dateparam), "%Y-%m-%d %H:%M:%S") + datetime.timedelta(seconds=number)
            return newDate
        except ValueError:
            raise ValueError("日期格式需为:%Y-%m-%d %H:%M:%S")

    def numberToDate(self,year,month,day):
        """
        函数描述:将数字转换为日期(年月日需为数字)
        用       法:numberToDate(年,月,日)
        示       例:numberToDate(2021,06,25)=> 2021-06-25   或者  numberToDate('2021','06','25') => 2021-06-25
        """
        param = (str(year),str(month),str(day))
        newDate = date.strptime("-".join(param), "%Y-%m-%d").date()
        return newDate
    
    def get_yesr(self,dateparam):
        """
        函数描述:获取日期的年
        用       法:get_yesr(日期)
        示       例:假设日期时间为2021-06-25,get_yesr(日期) => 2021
        """
        newDate = str( date.strptime(str(dateparam), "%Y-%m-%d"))[0:4]
        
        return newDate
    def get_month(self,dateparam):
        """
        函数描述:获取日期的月
        用       法:get_month(日期)
        示       例:假设日期时间为2021-06-25,get_month(日期) => 06
        """
        newDate = str( date.strptime(str(dateparam), "%Y-%m-%d")).split("-")[1]
        
        return newDate
    def get_day(self,dateparam):
        """
        函数描述:获取日期的日
        用       法:get_day(日期)
        示       例:假设日期时间为2021-06-25,get_day(日期) => 25
        """
        newDate = str( date.strptime(str(dateparam), "%Y-%m-%d"))[8:10]
        
        return newDate
    def get_hour(self,dateparam):
        """
        函数描述:获取日期的时
        用       法:get_hour(日期)
        示       例:假设日期时间为2021-06-25 15:12:42,get_hour(日期) => 15
        """
        try:
            newDate = str( date.strptime(str(dateparam), "%Y-%m-%d %H:%M:%S")).split(":")[0][-2:]
            return newDate
        except ValueError:
            raise ValueError("日期格式需为:%Y-%m-%d %H:%M:%S")
    def get_minute(self,dateparam):
        """
        函数描述:获取日期的分
        用       法:get_minute(日期)
        示       例:假设日期时间为2021-06-25 15:12:42,get_minute(日期) => 12
        """
        try:
            newDate = str( date.strptime(str(dateparam), "%Y-%m-%d %H:%M:%S")).split(":")[1]
            return newDate
        except ValueError:
            raise ValueError("日期格式需为:%Y-%m-%d %H:%M:%S")
    def get_second(self,dateparam):
        """
        函数描述:获取日期的秒
        用       法:get_second(日期)
        示       例:假设日期时间为2021-06-25 15:12:42,get_second(日期) => 42
        """
        try:
            newDate = str( date.strptime(str(dateparam), "%Y-%m-%d %H:%M:%S")).split(":")[2]
            return newDate
        except ValueError:
            raise ValueError("日期格式需为:%Y-%m-%d %H:%M:%S")

    
    def get_subtractYear(self,date1,date2):
        """
        函数描述:获取年的差值(日期A,日期B),单位:年
        用       法:get_subtractYear(日期A,日期B)
        示       例:假设日期A为2021-06-25,日期B为2023-06-26  get_subtractYear(日期A,日期B)=> 2.0
        
        """
        newDate = abs(date.strptime(date1,"%Y-%m-%d") - date.strptime(date2,"%Y-%m-%d")).days / 365
        return  round(newDate,2) 
    def get_subtractMonth(self,date1,date2):
        """
        函数描述:获取月的差值(日期A,日期B),单位:月
        用       法:get_subtractMonth(日期A,日期B)
        示       例:假设日期A为2021-06-25,日期B为2021-07-25  get_subtractMonth(日期A,日期B)=> 1.0
        
        """
        newDate = abs(date.strptime(date1,"%Y-%m-%d") - date.strptime(date2,"%Y-%m-%d")).days / 30
        return  round(newDate,2) 
    def get_subtractDay(self,date1,date2):
        """
        函数描述:获取天的差值(日期A,日期B),单位:天
        用       法:get_subtractDay(日期A,日期B)
        示       例:假设日期A为2021-06-25,日期B为2021-07-25  get_subtractDay(日期A,日期B)=> 30
        
        """
        newDate = abs(date.strptime(date1,"%Y-%m-%d") - date.strptime(date2,"%Y-%m-%d")).days
        return  newDate 


    def secondsToYears(self,number):
        """
        函数描述:秒转换为年,单位:年
        用       法:secondsToYears(秒数)
        示       例:假设开始秒数为31536000,  secondsToYears (秒数)=> 1.0
        
        """
        try:
            newdate = int(number)/(60*60*24*365)
            return round(newdate,2)
        except:
            raise ValueError("传入参数类型需为:数字")
    def secondsToMonth(self,number):
        """
        函数描述:秒转换为月,单位:月
        用       法:secondsToMonth (秒数)
        示       例:假设开始秒数为2592000,  secondsToYears (秒数)=> 1.0
        
        """
        try:
            newdate = int(number)/(60*60*24*30)
            return round(newdate,2)
        except:
            raise ValueError("传入参数类型需为:数字")
    def secondsToDay(self,number):
        """
        函数描述:秒转换为天,单位:天
        用       法:secondsToDay(秒数)
        示       例:假设开始秒数为86400,  secondsToDay (秒数)=> 1.0
        
        """
        try:
            newdate = int(number)/(60*60*24)
            return round(newdate,2)
        except:
            raise ValueError("传入参数类型需为:数字")
    def secondsToHour(self,number):
        """
        函数描述:秒转换为时,单位:时
        用       法:secondsToHour(秒数)
        示       例:假设开始秒数为3600,  secondsToHour (秒数)=> 1.0
        
        """
        try:
            newdate = int(number)/(60*60)
            return round(newdate,2)
        except:
            raise ValueError("传入参数类型需为:数字")

相关推荐

解锁WPS神秘函数:FACTDOUBLE,你真的会用吗?

函数界的隐藏高手:FACTDOUBLE在WPS的函数大家庭中,FACTDOUBLE函数就像是一位低调的武林高手,虽然不像SUM(求和)、VLOOKUP(数据查找)等函数那般被频繁使用、广为人知...

24点纸牌第一期:2 5 10 10(纸牌24点游戏大全)

24点纸牌数学游戏是一种益智游戏,一般随机抽4张牌,通过基本的加、减、乘、除四则运算,计算出结果为24。需要强调两点是:1.随机抽4张牌;2.只能用基本的加、减、乘、除四则运算,不能用高阶算法比如开根...

纯纯的干货知识,十二生肖的雅号,你知道多少呢

今天给大家分享古人对于十二生肖的雅号的理解,学着这些知识,不仅仅能够提高品味还能让自己的知识库提升一个阶乘,何尝不是一件美妙的事情呢,感兴趣的点个赞哦。1.子鼠:社君,是老鼠在古代的尊称,因为古人认为...

常见的10种算法(常见的10种算法有哪些)

常见的10种算法数据结构研究的内容:就是如何按一定的逻辑结构,把数据组织起来,并选择适当的存储表示方法把逻辑结构组织好的数据存储到计算机的存储器里。算法研究的目的是为了更有效的处理数据,提高数据运算效...

24点趣味多,4张最多凑法(超20)的牌(1,2,3,4)

1、2、3、4凑24点的趣味性:数学游戏的“黄金组合”这四张看似普通的数字牌,却被称为24点游戏的“魔法牌组”——解法多样、规则灵活,甚至能让人感受到数学的创造力和游戏化的惊喜。以下是它的独特趣味所...

语言EI会议!速投指南(ei会议中文)

【推荐会议】会议名称:IEEEInternationalConferenceonNaturalLanguageProcessingandKnowledgeEngineering(N...

### **零代码入门:如何用AutoML快速构建测试模型**

---**——基于GoogleAutoML与TeachableMachine的实战指南**---####**引言:AutoML如何赋能黑盒测试?**作为黑盒测试工程师,我们的核心任务是验证软件功...

电子通信类EI新人友好刊!(电子通信学报)

期刊推荐电子通信领域新人友好期刊:《IEEECommunicationsLetters》-刊号:ISSN1089-7798|CN(国内无独立刊号)-影响因子:最新影响因子为3.5(JCR...

「数字化」机器学习可轻松处理繁琐的压裂数据

机器学习技术可准确高效地识别出压裂曲线中的数据节点,帮助工程师们处理繁琐的压裂数据。编译丨TOM影子在水力压裂作业期间,每隔一秒就会记录泵送数据,并将之传输到现场,以csv格式保存。原始泵送数据中包...

基于计算机视觉的棋盘图像识别(基于计算机视觉的棋盘图像识别工具)

本期我们将一起学习如何使用计算机视觉技术识别棋子及其在棋盘上的位置我们利用计算机视觉技术和卷积神经网络(CNN)为这个项目创建分类算法,并确定棋子在棋盘上的位置。最终的应用程序会保存整个图像并可视化的...

如何利用DeepSeek高效完成论文写作:从选题到答辩全流程指南-下

5.数据分析与结果解释在实验部分,你需要分析数据并解释结果。你可以向DeepSeek提问:提问示例“如何分析实验数据并解释结果?”DeepSeek的回答“你可以使用准确率、召回率和F1分数等指标评估...

遥感领域!EI会议审稿周期实测!(2020年遥感国际会议)

推荐高质量遥感EI会议:ICRSE2025会议名称:国际遥感与环境大会会议编号:#12789截稿时间:2025年3月20日召开时间/地点:2025年6月15-17日·新加坡国立大学论...

遥感EI会议·选刊密码!(遥感学术)

【优质遥感EI会议推荐】会议名称:InternationalConferenceonRemoteSensingandGeoinformatics(ICRSG)会议编号:Conferenc...

使用BERT进行中文情感分析教程(bert 教程)

以下是使用BERT进行中文情感分析的步骤详解和示例代码:1.环境准备安装所需库:bashpipinstalltransformerstorchpandassklearn2.数据准备准备C...

遥感测绘方向:EI会议避坑清单!(测绘遥感信息)

推荐高性价比EI会议国际遥感技术与应用研讨会(ICRTA2025)会议号:#12345截稿日期:2025年4月30日召开时间:2025年8月15-17日举办地点:新加坡论文集出版:Spr...