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

## 简介
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.mzph.cn/news/71920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI云服务平台大全:GPU租用 | App托管 | MLOps平台

我们搜集整理了国内外主要的深度学习云服务商&#xff0c;包括云GPU供应商、WebApp托管商和MLOps平台商。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 1、云GPU供应商 只有一台笔记本电脑&#x1f4bb;不足以运行你的AI模型&#xff0c;忘记它吧&#xff0c;使用云 …

解密Spring Cloud Alibaba核心技术,实战案例书现世

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1f3c6;&#xff0c;阿里云专家博主&#x1f3…

晨启,MSP430开发板,51开发板,原理图,PCB图

下载&#xff1a;https://github.com/xddun/blog_code_search

【算法训练-链表 五】【求和】:链表相加(逆序)、链表相加II(顺序)

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【链表相加】&#xff0c;使用【链表】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

【unity3D】如何修改相机的默认视角

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的如何修改相机的默认视角 如何修改相机的默认视角 Game窗口运行的话视角是这样的&#xff1a; 此时Scene窗口的视角是这样的&…

java基础面试题第二天

1.java基础面试题第三天 1.数组到底是不是对象 是对象。 先说说对象的概念。对象是根据某个类创建出来的一个实例&#xff0c;表示某类事物中一个具体的个体。数组类的父类就是Object类&#xff0c;那么可以推断出数组就是对象。 2.java的基本数据类型有哪些&#xff1f; b…

[华为云云服务器评测] 华为云耀云服务器 Java、node环境配置

系列文章目录 第一章 [linux实战] 华为云耀云服务器L实例 Java、node环境配置 文章目录 系列文章目录前言一、任务拆解二、修改密码三、配置安全规则四、远程登录并更新apt五、安装、配置JDK环境5.1、安装openjdk,选择8版本5.2、检查jdk配置 六、安装、配置git6.1、安装git6.2…

Git版本管理

Git版本介绍 Git 是一个分布式版本控制系统&#xff0c;它被广泛用于协作软件开发和管理代码的变更。Git 的设计目标是为了处理速度快、灵活性强、数据完整性好的版本管理需求。以下是 Git 版本管理的详细介绍&#xff1a; 版本控制系统 (VCS)&#xff1a; Git 是一种版本控制…

Centos7.6离线安装docker

一、Docker安装 1、安装环境&#xff1a; 系 统&#xff1a;CentOS Linux release 7.6.1810 (Core) Docker版本&#xff1a;19.03.5 2、下载离线安装包 docker安装包下载&#xff1a;https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker…

湖南省副省长秦国文一行调研考察亚信科技

9月5日&#xff0c;湖南省人民政府党组成员、副省长秦国文一行到亚信科技调研考察&#xff0c;亚信科技高级副总裁陈武主持接待。 图&#xff1a;双方合影 在亚信科技创新展示中心&#xff0c;秦国文了解了亚信科技在5G、算力网络、人工智能、大数据等前沿领域的创新探索&…

Ubuntu开放指定端口

在Ubuntu中&#xff0c;要开放特定的端口&#xff0c;通常涉及到两个步骤&#xff1a; 配置服务&#xff1a;确保您的服务或应用程序正确配置为监听所需的端口。 更新防火墙规则&#xff1a;如果您使用的是防火墙&#xff08;例如ufw&#xff0c;它是Ubuntu的默认防火墙工具&a…

冠达管理:股票退市整理期?

近些年来&#xff0c;随着我国股市的发展&#xff0c;股票市场的出资者逐渐增多。但在出资过程中&#xff0c;退市股票的问题也成为了备受重视的论题。那么&#xff0c;股票退市收拾期到底是什么&#xff1f;如何应对退市股票&#xff1f; 首要&#xff0c;什么是股票退市收拾…

day42:C++ day2,C++对C的补充(引用、动态内存分配与回收、函数扩充以及结构体扩充)

面试题小结&#xff1a; 1、指针与引用的区别&#xff1f; &#xff08;1&#xff09;指针指向的是变量的地址&#xff0c;而引用是指向变量本身&#xff1b; &#xff08;2&#xff09;指针可以有多级指针&#xff0c;而引用只有一级引用&#xff1b; &#xff08;3&#…

访问者模式的一个使用案例——文档格式转换

访问者模式的一个使用案例——文档格式转换 假设我们在开发一个文档编辑器&#xff0c;它支持多种不同的文档元素&#xff08;如段落、图片、表格等&#xff09;&#xff0c;现在我们需要添加一个功能——将文档导出为 HTML 或 Markdown 格式。 这就是一个典型的访问者模式的…

2023京东医疗保健器械行业数据分析(京东数据分析平台)

随着人们对自身健康的重视程度不断加深&#xff0c;当前市场中各类对疾病具有诊断、预防、监护、治疗或者缓解的医疗保健仪器越来越受到消费者的关注。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年7月份&#xff0c;京东平台医疗保健仪器的销量为950万&#xf…

SpringCloud(34):Nacos服务发现

1 从单体架构到微服务 1.1单体架构 Web应用程序发展的早期,大部分web工程师将所有的功能模块打包到一起并放在一个web容器中运行,所有功能模块使用同一个数据库,同时,它还提供API或者UI访问的web模块等。 尽管也是模块化逻辑,但是最终它还是会打包并部署为单体式应用,这…

unity 安卓端使用JSON(LitJson)

注&#xff1a;&#xff01;&#xff01;&#xff01;untiy 打包安卓平台不允许使用Unity自带的json工具Newtonsoft.Json LitJson不支持float类型的字符。 LitJson支持的格式如下&#xff1a; public JsonData(bool boolean); public JsonData(double number); public Jso…

【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用

文章目录 一、拖拽事件1.1 拖拽事件1.2 案例&#xff1a;拖拽丢弃图片 二、音频和视频三、defer 与 async 属性3.1 概述3.2 示例一&#xff1a;3.3 示例二&#xff1a; 四、dialog 元素 一、拖拽事件 原生JavaScipt案例合集 JavaScript DOM基础 JavaScript 基础到高级 Canvas…

React 全栈体系(四)

第二章 React面向组件编程 六、组件的生命周期 1. 效果 需求:定义组件实现以下功能&#xff1a; 让指定的文本做显示 / 隐藏的渐变动画从完全可见&#xff0c;到彻底消失&#xff0c;耗时2S点击“不活了”按钮从界面中卸载组件 <!DOCTYPE html> <html lang"e…

ES6常用新特性

ES6改动很大&#xff0c;可以简单分为四类 1、解决原有语法的缺陷和不足 例如&#xff1a;let&#xff0c;const 2、对原有语法进行增强 解构、扩展、模板字符串 3、新增对象、全新的方法&#xff0c;全新的功能 Object.assign()、Proxy对象代理、Reflect 等等 4、全新的数据类…