时间处理——测试工程师Python开发实战(08)

发表于:2023-8-01 09:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:胡通    来源:51Testing软件测试网原创

#
Python
  4.4  时间处理
  Python提供了3个时间处理库,分别是time、datetime和calendar。这3个库均被收录到Python标准库中,如表4-6所示。
表4-6  时间处理库
  3个时间处理库从功能上看,可以认为是互补关系,三者侧重点不同。下面我们将简要展开讲解使用最多的time库和datetime库。
  时间相关概念
  格林尼治时间(Greenwich mean time,GMT)指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义为通过那里的经线,GMT又称世界时UT。
  协调世界时(coordinated universal time,UTC),又称世界标准时间,基于国际原子钟,误差为每日数纳秒。
  时区指地球上的区域使用同一个时间定义。有关国际会议决定将地球表面按经线划分成24个时区,并且规定相邻区域的时间相差1小时。人们每跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时),跨过几个区域就加或减几小时。例如我国处于东八区,表示为GMT+8。
  UNIX时间戳是从UTC(1970年1月1日0时0分0秒)开始到现在的时间(以秒为单位)的数值。
  1.time库
  最常用的是获取时间戳,例如使用time.time(),可以得到输出1659340903.744475。时间戳指从epoch(1970年1月1日00:00:00 UTC)到现在的时间(以秒为单位)的数值,返回值为浮点型,用的是UTC。一般在使用时会进行时间戳、格式化或结构化的转换。
  另外,对于格式化时间字符串,time提供了strftime()和strptime()来实现时间和字符串之间的转换:
  strftime,即string format time,用来将时间格式化成字符串;
  strptime,即string parse time,用来将字符串解析成时间。
  示例如下:
import time
gmtime = time.gmtime()                                                       
time.strftime('%Y-%m-%d %H:%M:%S', gmtime)     # struct_time转换成字符串?
  输出结果如下:
  2023-02-17 09:49:21
  2.datetime库
  time库解决了时间的获取和格式化表示,datetime库则进一步解决了快速获取并操作时间中年、月、日、时、分、秒的能力,提供的类主要有datetime、time、date、timedelta等。
  (1)datetime类的方法如表4-7所示。
表4-7  datetime类的方法
  示例如下:
import datetime
import time         
datetime.datetime.fromtimestamp(time.time()) # 将time.time()转换成datetime对象?
  输出结果如下:
  2023-02-17 17:48:33.169588
  (2)time类,表示时间值,可以创建的对象只有时、分、秒、毫秒等,time类的方法如表4-8所示。
表4-8  time类的方法
  示例如下:
import datetime
t = datetime.time(15,12,25)  
t.second           
  输出结果如下:
  25
  (3)date类,表示日期值,可以创建的对象只有年月日,date类的方法如表4-9所示。
表4-9  date类的方法
  示例如下。
import datetime
today = datetime.date.today()
today.year?
  输出结果如下:
  2023
  (4)timedelta类,在实际使用时,常用的功能除了各种时间的转换,还有对日期时间的比较和加减运算,timedelta类的方法如表4-10所示。
表4-10  timedelta类的方法
  示例如下。
import datetime
today = datetime.date.today()        # 获取当前日期的datetime对象
onday = datetime.timedelta(days=1)   # 获取一个单位为一天的timedelta对象
today - onday                        # 取前一天?
  输出结果如下:
  2023-02-16
  3.时间操作的示例
  代码清单4-5封装了时间操作的工具,包含日、时、分、秒和增加指定时间的转换等。
# -*- coding: utf-8 -*-
# @Time : 2022/2/18 11:20 上午
# @Project : timeDemo
# @File : datetimeUtil.py
# @Author : hutong
# @Describe: 微信公众号:大话性能
# @Version: Python3.9.8
?
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 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):
        """
        函数描述:
        将指定日期加/减指定秒数,分钟自动递增/减
        用法:addSeconds(日期,秒数)
        示例:假设日期值为2021-06-25 15:12:42,addSeconds(日期,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_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")?
代码清单4-5  datetimeUtil
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号