首页 > 其他分享 >软件测试|把datetime拍在沙滩上的pendulum模块

软件测试|把datetime拍在沙滩上的pendulum模块

时间:2023-02-19 12:01:18浏览次数:52  
标签:02 pendulum datetime time print local 软件测试

前言

之前我们有一篇文章,使用datetime模块来获取昨天今天明天的日期,不说非常复杂,但还是要说一下,还是有点麻烦。而且datetime模块还有一大缺点,就是对于时区的处理功能不够强大。所以,后浪来了,pendulum模块它来了,有了pendulum,我只能说一句,datetime别打电话来了,我怕pendulum误会!

安装

与Python内置的datetime模块不同,pendulum是第三方库,需要我们通过pip进行安装,命令如下:

pip install pendulum

获取某地的当地时间

import pendulum

local_time_tokyo = pendulum.now('Asia/Tokyo')
local_time_shanghai = pendulum.now('Asia/Shanghai')
local_time_newyork = pendulum.now('America/New_York')
local_time_toronto = pendulum.now('America/Toronto')
local_time_vancouver = pendulum.now('America/Vancouver')
# 打印东京的当地时间
print(local_time_tokyo)
# 打印上海的当地时间
print(local_time_shanghai)
# 打印纽约的当地时间
print(local_time_newyork)
# 打印多伦多的当地时间
print(local_time_toronto)
# 打印温哥华的当地时间
print(local_time_vancouver)
-------------------------------
2023-02-10T16:02:10.756265+09:00
2023-02-10T15:02:10.764323+08:00
2023-02-10T02:02:10.764323-05:00
2023-02-10T02:02:10.764323-05:00
2023-02-09T23:02:10.774224-08:00

时区运算

不同时区的时间可以用来比较、运算和转化,例如:

import pendulum
# 计算上海与温哥华的时差
first = pendulum.datetime(2023, 2, 10, 15, 26, 11, 0, tz='Asia/Shanghai')
second = pendulum.datetime(2023, 2, 10, 15, 26, 11, 0, tz='America/Vancouver')
time_delta=first.diff(second).in_hours()
print(time_delta)
-------------------------
# 输出结果如下:
16

pendulum获取日期时间

import pendulum

# 创建当前的 datetime
# 默认是本地时区,但时区可以指定
local_time = pendulum.now()
print(local_time)

# 创建当前的 date,但返回的仍是 datetime
# 只不过时分秒均为 0,同样可以指定时区
today = pendulum.today()
print(today)

# 获取明天对应的 date
# 返回的是 datetime,时分秒为 0
# 时区可以指定,默认是本地时区
tomorrow = pendulum.tomorrow()
print(tomorrow)

# 获取昨天对应的 date
yesterday = pendulum.yesterday()
print(yesterday)
----------------------------
输出结果如下:
2023-02-15T11:31:10.771990+08:00
2023-02-15T00:00:00+08:00
2023-02-16T00:00:00+08:00
2023-02-14T00:00:00+08:00

我们可以看到,使用pendulum时,我们获取昨天和明天的日期比datetime模块更加快速直接,datetime模块需要借助timedelta,提供时间差,才能计算昨天明天的日期。

获取其他信息

有时候我们除了需要了解日期,还需要了解这一天是周几,是今年的第几天,这周是今年的第几周等信息,这些东西,pendulum也替我们封装好了方法,我们可以直接使用。

import pendulum

today = pendulum.local(
2023, 6, 7, 11, 10, 30)

# 返回星期几
# 注意:星期一到星期天分别对应 1 到 7
print(today.isoweekday())

# 返回一年当中的第几天
# 范围是 1 到 366
print(today.day_of_year)

# 返回一个月当中的第几天
print(today.days_in_month)

# 返回一个月当中的第几周
print(today.week_of_month)

# 返回一年当中的第几周
print(today.week_of_year)

# 是否是闰年
print(today.is_leap_year())
------------------------------
输出结果如下:
3
158
30
2
23
False

pendulum日期运算

接下来我们介绍的是pendulum相比datetime最强大的地方,日期时间的运算功能。示例代码如下:

import pendulum

today = pendulum.local(
2022, 3, 30, 20, 10, 30)

# 返回下一个月的今天
print(today.add(months=1))

# 返回上一个月的今天
# 但是上一个月是 2 月,并且是平年
# 所以最多 28 天
print(today.add(months=-1))
----------------------------------
输出结果如下:
2022-04-30T20:10:30+08:00
2022-02-28T20:10:30+08:00

上述代码返回的是月份的加减,但这不是全部,这只是基本操作,后面我们来展示一下更强的日期时间的运算操作。

import pendulum

time1 = pendulum.local(
2010, 6, 17, 12, 22, 33)

time2 = pendulum.local(
2013, 6, 7, 20, 10, 30)

period = time2 - time1
# 返回的是 Period 对象
# 相当于 datetime 模块里面的 timedelta
print(period.__class__)
"""
<class 'pendulum.period.Period'>
"""

# 但是功能方面,Period 要强大很多
# 两者差了多少年
print(period.in_years())
# 两者差了多少个月
print(period.in_months())
# 两者差了多少个星期
print(period.in_weeks())
# 两者差了多少天
print(period.in_days())
# 两者差了多少个小时
print(period.in_hours())
# 两者差了多少分钟
print(period.in_minutes())
# 两者差了多少秒
print(period.in_seconds())

----------------------------
输出结果如下:
2
35
155
1086
26071
1564307
93858477

如上,我们输出了两个时间点相差了多少时间的精确信息,不只是相差多少天,年月日时分秒还有周都可以计算出来,真的是非常方便快捷。

总结

本篇文章我们主要讲解了pendulum模块的安装和使用,这个模块比datetime模块使用更加方便,对于时区和时间的计算更加快捷,大家快用起来吧!


标签:02,pendulum,datetime,time,print,local,软件测试
From: https://blog.51cto.com/u_15640304/6066683

相关文章

  • 软件测试|Python列表的使用,你都会了吗?(一)
    前言列表是Python的基本数据类型之一,也是我们日常使用Python中,使用较多的数据类型。Python内置了很多关于列表的操作,这些操作是我们必须掌握的,下面我们就来介绍这些操作。创......
  • 软件测试过程中经常遇到的几个问题
    相信大家在测试工作过程中一定遇到过许许多多的问题,而且每个人的问题都不太一样。今天总结小编在测试过程中经常遇到的几个方面与大家分享一下。 1.测试执行方......
  • 软件测试的七类驱动测试模式
    在进行软件测试时,总要有一个出发点吧?从哪里开始分析?测试设计是基于什么?简单地说,什么是驱动测试工作?这是一个基本问题,基于自己多年对软件工程、产品质量和测试等的......
  • 软件测试人员如何体现自己的价值
    第一,作为测试人员,业务能力应该摆在首位的,很多公司的业务多且比较复杂,熟悉业务知识,对产品有深刻认识是基本要求。测试过程中,应该先谈业务再谈技术,保障业务是底线,通过技......
  • 软件测试新人如何提升自己?
    首先要熟悉部门业务,了解目前一共有哪些项目,你可能会投入哪个项目,这样就可以有优先级的看需求。看需求一定要仔细,如果看不透彻,很容易漏掉测试点,或者发现不了需求存在的......
  • 如何提升软件测试的价值?
    日常我们测试的项目都是时间紧急,导致需求或设计都可能存在一定的问题;或是bug或是未考虑周全,或是描述不清。开发写代码过程也会出现遗漏、错误或到了时间节点未进行联......
  • java 字符串如何直接转LocalDateTime?
    1.情景展示在实际开发过程中,可能会遇到将前端传的日期格式转成LocalDateTime插入到数据库的情况,如何将日期转成LocalDateTime呢?2.原因分析在Java8中,日期类不同于以......
  • 一个合格的软件测试工程师应该具有的能力
    从事软件测试工作已经有一年之久了,从最初的啥都不懂,到现在能够熟练完成测试工作,我经历了很多,也成长了很多,在这一年多的日子里,我学到了很多东西。当然也许现在我还不是......
  • 软件测试工作经验分享
    一、测试阶段划分1、单个模块功能测试时间相对较长,但每一个项目都应该有专门的集成测试阶段,并且应该不止进行一轮。每一轮集成测试,应该都有自己的目的,比如第......
  • ABP VNext DateTime Json处理
    前言api接口返回DateTime默认是yyyy-MM-ddTHH:mm:ss格式,需要转成yyyy-MM-ddHH:mm:ss解决方法Module文件添加context.Services.Configure<AbpJsonOptions>(options=......