【Web_接口测试_Python3_日期时间库】Arrow获取过去/当前未来时间日期、格式化时间日期、转换时间戳、获取不同时区时间日期等

news/2024/10/18 0:31:22/
## 简介
Arrow是一个 Python 库,它提供了一种明智且人性化的方法来创建、操作、格式化和转换日期、时间和时间戳。它实现并更新 datetime 类型,填补了功能上的空白,并提供了支持许多常见创建方案的智能模块 API。简而言之,它可以帮助您以更少的导入和更少的代码来处理日期和时间。## 为什么使用 Arrow 而不是内置模块?Python的标准库和其他一些低级模块具有接近完整的日期,时间和时区功能,但从可用性的角度来看效果不佳:
太多模块:datetime、time、calendar、dateutil、pytz等
类型太多:date、time、datetime、tzinfo、timedelta、relativedelta 等。
时区和时间戳转换是冗长和不愉快的
时区幼稚是常态
功能差距:ISO 8601 解析、时间跨度、人性化
pip install arrow# 获取当前时间,返回的Arrow对象
arrow.now()  # 2022-05-06T09:32:41.296610+08:00
arrow.utcnow()  # 2022-05-06T01:50:44.670980+00:00# 获取当前时间戳,返回的Arrow对象
arrow.now().timestamp  # 1651800761
arrow.now().float_timestamp  # 1651800761.29661# 获取datetime属性值,获取当前时间的年、月、日、时、分、秒
now = arrow.now()  # 2022-05-06T09:32:41.296610+08:00
now.year  # 2022
now.month  # 5
now.day  # 6
now.hour  # 9
now.minute  # 32
now.second  # 41# 将arrow对象转为字符串
## 将arrow对象转为字符串格式化输出
now = arrow.now()  # 2022-05-06T09:32:41.296610+08:00
now.format()  # '2022-05-06 09:32:41+08:00'
now.format('YYYY-MM-DD HH:mm:ss ZZ')  # '2022-05-06 09:32:41 +08:00'
now.format('YYYY-MM-DD HH:mm:ss')  # '2022-05-06 09:32:41'
now.format('YYYYMMDD')  # '20220506'
now.format('X')  # '1651800761'  字符串格式的时间戳
now.format('MMMM')  # 'May' 英文的月份# 将时间戳转化为arrow对象
arrow.get(1651800761)  # 2022-05-06T01:32:41+00:00
# 转换为字符串
arrow.get(1651800761).format('YYYY-MM-DD HH:mm:ss')  # '2022-05-06 09:32:41'# 从字符串中获取时间
## 日期和时间格式的任一侧都可以用以下列表中的一个标点符号分隔:,.;:?!"\`'[]{}()<>
arrow.get("Cool date: 2019-10-31T09:12:45.123456+04:30.", "YYYY-MM-DDTHH:mm:ss.SZZ")  # <Arrow [2019-10-31T09:12:45.123456+04:30]>arrow.get("Tomorrow (2019-10-31) is Halloween!", "YYYY-MM-DD")  # <Arrow [2019-10-31T00:00:00+00:00]>
arrow.get("Halloween is on 2019.10.31.", "YYYY.MM.DD")  # <Arrow [2019-10-31T00:00:00+00:00]>
# 错误示例
arrow.get("It's Halloween tomorrow (2019-10-31)!", "YYYY-MM-DD")  # 引发异常,因为日期后面有多个标点符号# 字符串转换为时间戳
arrow.get("2022-05-01").int_timestamp  # 1651363200
arrow.get("2022-05-01").float_timestamp  # 1651363200.0
arrow.get("2022-05-01").timestamp()  # 1651363200.0# arrow对象转换为datetime对象
arrow.now().datetime  # 2022-05-06 09:32:41.296610+08:00# 时间偏移
# # shift()
now = arrow.now()  # 2022-05-06T09:32:41.296610+08:00
# 后3天
now.shift(days=3).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:09 09:32:41'
# 前2天
now.shift(days=-2).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:04 09:32:41'
# 上1年
now.shift(years=-1).format('YYYY:MM:DD HH:mm:ss')  # '2021:05:04 09:32:41'
# 下2个月
now.shift(months=2).format('YYYY:MM:DD HH:mm:ss')  # '2022:07:06 09:32:41'
# 2小时后
now.shift(hours=2).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:06 11:32:41'
# 1分钟前
now.shift(minutes=-1).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:06 09:34:41'
# 30秒前
now.shift(seconds=-30).format('YYYY:MM:DD HH:mm:ss')  # '2022:05:06 09:34:11'
# 也可以多个参数同时使用
# 30秒前
now.shift(hours=2, minutes=-1, seconds=-30).format('YYYY:MM:DD HH:mm:ss')# 其它方法
# humanize() 人性化输出
# 本地化、人性化表示返回相对时间差异
now = arrow.now()
now.humanize()  # '26 seconds ago'
now.humanize(locale='zh-cn')  # ‘26秒前’
now = arrow.now()
future = now.shift(hours=2)
future.humanize(now, locale='zh-cn')  # '2小时后'# span() # 获取任何单位的时间跨度
now.span('hour')  # (<Arrow [2022-05-06T15:00:00+08:00]>, <Arrow [2022-05-06T15:59:59.999999+08:00]>)# floor() # 时间所在区间的开始
now.floor('hour')  # <Arrow [2022-05-06T15:00:00+08:00]># ceil() # 时间所在区间的结尾
now.ceil('hour')  # <Arrow [2022-05-06T15:59:59.999999+08:00]>
"""
#!/usr/bin/env/python3
# -*- coding:utf-8 -*-from datetime import date
from boltons.timeutils import daterange
from typing import Any, Union, Text, List, AnyStrclass Handle_time():def get_appointed_date(self) -> List:"""msg:构造日期,返回某时间段的约定日期step (int):元组 (year, month, day)inclusive (bool) :是否包含 stop 的日期return: [datetime.date(2022, 1, 25), datetime.date(2022, 2, 25)]"""return [day for day in daterange(date(year=2022, month=1, day=25),date(year=2023, month=1, day=1),step=(0, 1, 0),inclusive=True)]def get_add_date(self, default_date={"year": 2022, "month": 11, "day": 1}, date_format='%Y-%m-%d',weeks=0, days=1, hours=0, minutes=0, seconds=0, milliseconds=0, microseconds=0):"""msg:返回递增日期,按周、按日、按小时递增default_date:默认日期date_format:输出格式return:2022-11-02"""from datetime import datetimefrom datetime import timedeltahandle_time = datetime(default_date["year"], default_date["month"], default_date["day"]) + timedelta(weeks=weeks, days=days, hours=hours, minutes=minutes, seconds=seconds, milliseconds=milliseconds, microseconds=microseconds, )date = handle_time.strftime(date_format)return datetest = Handle_time()
if __name__ == '__main__':print(test.get_appointed_date())print(test.get_add_date())#!/usr/bin/env/python3
# -*- coding:utf-8 -*-from typing import List, Any
import arrowclass Handle_arrow_time():def get_someDate_byDescribe(self, date_describe: str, format: str = "YYYY-MM-DD HH:mm:ss") -> Any:# 通过描述,获取指定日期if date_describe == 'today':return arrow.now().format(format)elif date_describe == 'tomorrow':return arrow.now().shift(days=1).format(format)elif date_describe == 'yesterday':return arrow.now().shift(days=-1).format(format)elif date_describe.endswith('days later'):date_num = int(date_describe.split(' ')[0])return arrow.now().shift(years=0, months=0, days=date_num, hours=0, minutes=0, seconds=0).format(format)elif date_describe.endswith('days ago'):date_num = int(date_describe.split(' ')[0])return arrow.now().shift(years=0, months=0, days=0 - date_num, hours=0, minutes=0, seconds=0).format(format)def get_someDate_byTimeKey(self, years: int = 0, months: int = 0, days: int = 0, hours: int = 0, minutes: int = 0, seconds: int = 0, format: str = "YYYY-MM-DD HH:mm:ss") -> str:# 通过参数,获取指定日期return arrow.now().shift(years=years, months=months, days=days, hours=hours, minutes=minutes, seconds=seconds).format(format)def get_nowDate_someAttribute(self, key="year") -> Any:# 获取datetime属性值,获取当前时间的年、月、日、时、分、秒now = arrow.now()  # 2022-05-06T09:32:41.296610+08:00if key == "year":return now.year  # 2022elif key == "month":return now.month  # 5elif key == "day":return now.day  # 6elif key == "hour":return now.hour  # 9elif key == "minute":return now.minute  # 32elif key == "second":return now.second  # 41elif key == "timestamp":  # 获取当前时间戳,返回的Arrow对象return now.timestamp  # 1651800761elif key == "int_timestamp":  # 获取当前时间戳,返回的Arrow对象return now.int_timestamp  # 1651800761.29661elif key == "float_timestamp":return now.float_timestamp  # 1651800761.29661elif key == "datetime":  # arrow对象转换为datetime对象return now.datetime  # 2022-05-06 09:32:41.296610+08:00def get_someDate_fromString(self, key="year") -> Any:# 从字符串中获取时间## 日期和时间格式的任一侧都可以用以下列表中的一个标点符号分隔:,.;:?!"\`'[]{}()<>arrow.get("Cool date: 2019-10-31T09:12:45.123456+04:30.", "YYYY-MM-DDTHH:mm:ss.SZZ")  # <Arrow [2019-10-31T09:12:45.123456+04:30]>arrow.get("Tomorrow (2019-10-31) is Halloween!", "YYYY-MM-DD")  # <Arrow [2019-10-31T00:00:00+00:00]>arrow.get("Halloween is on 2019.10.31.", "YYYY.MM.DD")  # <Arrow [2019-10-31T00:00:00+00:00]>try:#  错误案例arrow.get("It's Halloween tomorrow (2019-10-31)!", "YYYY-MM-DD")  # 引发异常,因为日期后面有多个标点符号except Exception as e:print(f"错误示例:{e}")# 字符串转换为时间戳arrow.get("2022-05-01").int_timestamp  # 1651363200arrow.get("2022-05-01").float_timestamp  # 1651363200.0arrow.get("2022-05-01").timestamp()  # 1651363200.0if __name__ == '__main__':test = Handle_arrow_time()print(test.get_someDate_byDescribe("today"))print(test.get_someDate_byTimeKey())print(test.get_nowDate_someAttribute())print(test.get_someDate_fromString())print(vars(Handle_arrow_time).items())


http://www.ppmy.cn/news/1095850.html

相关文章

云备份客户端——数据管理模块

数据管理模块设计之前&#xff0c;我们需要先明确该模块的信息是用来做什么的。根据上文分析该模块信息主要用于判断一个文件是否需要备份&#xff0c;判断条件有两个&#xff1a;1.新增文件 2.被修改过的文件 新增文件好判断&#xff0c;由于我们获得新文件后是先上传文件&…

Fiber 架构实现流程

Fiber 架构是 React 中用于实现虚拟 DOM 的一种算法架构。它的目标是提高渲染性能和用户体验&#xff0c;通过将渲染工作分割成多个小任务&#xff0c;在不阻塞主线程的情况下逐步完成整个渲染过程。 下面是 Fiber 架构的简要实现过程&#xff1a; 构建 Fiber 树&#xff1a;在…

ffmpeg-android studio创建jni项目

一、创建native项目 1.1、选择Native C 1.2、命名项目名称 1.3、选择C标准 1.4、项目结构 1.5、app的build.gradle plugins {id com.android.application }android {compileSdk 32defaultConfig {applicationId "com.anniljing.ffmpegnative"minSdk 25targetSdk 32…

TheRouter 框架原理

TheRouter 框架入口方法 通过InnerTheRouterContentProvider 注册在AndroidManifest.xml中&#xff0c;在应用启动时初始化 <application><providerandroid:name"com.therouter.InnerTheRouterContentProvider"android:authorities"${applicationId}.…

决策单调性优化dp

区间类: P1880 [NOI1995] 石子合并 f i , j m a x ( f i , k f k 1 , j ) w i , j f_{i,j}max(f_{i,k}f_{k1,j})w_{i,j} fi,j​max(fi,k​fk1,j​)wi,j​ 若 w i , j w_{i,j} wi,j​满足区间单调性和四边形不等式&#xff0c;则 f i , j f_{i,j} fi,j​满足四边形不等式 …

springboot 请求https的私有证书验证

一、方案描述 我这里采用RestTemplate的方式调用https请求&#xff0c;请求第三方接口获取数据&#xff0c;证书由第三方私自签发的证书&#xff0c;我们构建的是一个springboot的API项目。 1.pom文件引入jar <dependencies><dependency><groupId>org.spr…

OmniGraffle Pro for Mac 中文正式版(附注册码) 苹果电脑 思维导图软件

OmniGraffle Pro是OmniGraffle的高级版本&#xff0c;它提供了更多的功能和工具&#xff0c;可以帮助用户创建更为复杂和高级的图表和流程图。OmniGraffle Pro支持自定义形状、图形、线条和箭头等&#xff0c;可以让用户创建出更加精细的图表。此外&#xff0c;OmniGraffle Pro…

《热题100》字符串、双指针、贪心算法篇

思路&#xff1a;对于输入的的字符串&#xff0c;只有三种可能&#xff0c;ipv4,ipv6,和neither ipv4:四位&#xff0c;十进制&#xff0c;无前导0&#xff0c;小于256 ipv6:八位&#xff0c;十六进制&#xff0c;无多余0&#xff08;00情况不允许&#xff09;&#xff0c;不…