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

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

前言

之前我们有一篇文章,使用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模块使用更加方便,对于时区和时间的计算更加快捷,大家快用起来吧!

相关文章
|
9月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
257 7
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
381 2
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
242 2
|
8月前
|
数据采集 移动开发 算法
【硬件测试】基于FPGA的QPSK调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现QPSK调制与软解调系统,包含Testbench、高斯信道、误码率统计模块,并支持不同SNR设置。硬件版本新增ILA在线数据采集和VIO在线SNR设置功能,提供无水印完整代码及测试结果。通过VIO分别设置SNR为6dB和12dB,验证系统性能。配套操作视频便于用户快速上手。 理论部分详细解析QPSK调制原理及其软解调实现过程,涵盖信号采样、相位估计、判决与解调等关键步骤。软解调通过概率估计(如最大似然法)提高抗噪能力,核心公式为*d = d_hat / P(d_hat|r[n])*,需考虑噪声对信号点分布的影响。 附Verilog核心程序代码及注释,助力理解与开发。
283 5
|
9月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的MSK调制解调系统系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现MSK调制解调系统,采用Verilog开发,包含同步模块、高斯信道模拟、误码率统计等功能。相比仿真版本,新增ILA数据采集与VIO在线SNR设置模块。通过硬件测试验证,展示不同SNR(如10dB和16dB)下的性能表现。研究聚焦软件无线电领域,优化算法复杂度以适应硬件限制,利用MSK恒定包络、相位连续等特性提升频谱效率。核心代码实现信号生成、调制解调、滤波及误码统计,提供完整的硬件设计与分析方案。
313 19
|
9月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
241 17
|
9月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前开发的16QAM调制与软解调系统,增加了硬件测试功能。该系统包含FPGA实现的16QAM调制、软解调、高斯信道、误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置模块。通过硬件测试,验证了不同SNR条件下的系统性能。16QAM软解调通过比较接收信号采样值与16个调制点的距离,选择最近的调制点来恢复原始数据。核心Verilog代码实现了整个系统的功能,包括SNR设置、信号处理及误码率统计。硬件测试结果表明系统在不同SNR下表现良好,详细操作步骤可参考配套视频。
258 13
|
9月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
254 7
|
9月前
|
数据采集 算法 数据处理
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
245 2
|
10月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16QAM基带通信系统硬件测试版本。该系统在仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比(如15dB、25dB)的测试。16QAM是一种正交幅度调制方式,通过两路4ASK信号叠加实现,每个符号包含4比特信息。系统采用正交调幅法生成16QAM信号,并通过DAC转换为模拟信号。解调时使用正交相干解调,经低通滤波器恢复电平信号。开发板内完成发射与接收,无需定时同步模块。代码可移植至其他开发板,具体步骤见配套文档。
198 2