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

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

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值