【标准库】日期和时间
一、日期的解析与格式化
此处介绍如何将一个字符串转为日期类型,用于数学运算;以及如何将一个日期类型按照期望的格式输出为字符串;日期的解析与格式化我们使用标准库 datetime 实现。
日期的解析和格式化使用如下两个方法:
strptime: String -> Time (解析字符串为时间对象)strftime: String <- Time (格式化时间对象为字符串)
日期的格式化输出与解析需要按照一定的规则解析,主要使用到的格式指令如下:
| 指令 | 含意 |
|---|---|
%Y |
年 |
%m |
十进制数 [01,12] 表示的月。 |
%d |
十进制数 [01,31] 表示的日(每月中的日)。 |
%H |
十进制数 [00,23] 表示的小时(24小时制)。 |
%M |
十进制数 [00,59] 表示的分钟。 |
%S |
十进制数 [00,61] 表示的秒。 |
%I |
十进制数 [01,12] 表示的小时(12小时制)。 |
%p |
本地化的 AM 或 PM 。 |
%z |
时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中H表示十进制小时数字,M表示小数分钟数字 [-23:59, +23:59] 。 |
%a |
本地化的缩写星期中每日的名称。 |
%A |
本地化的星期中每日的完整名称。 |
%b |
本地化的月缩写名称。 |
%B |
本地化的月完整名称。 |
1、获取当前时间
1 | |
| 方法 | 描述 |
|---|---|
datetime.today() |
返回当前的本地日期 |
datetime.now(tz=None) |
返回表示当前地方时的 date 和 time 对象,tz代表时区信息,在tz未指定的情况下,类似于 today() |
借助timedelta获得时间偏差,在使用timezone包装为时区对象,使用now()构建时指定时区
示例:
1 | |
2、构建 datetime 对象
| 方法 | 描述 |
|---|---|
datetime(year, month, day, hour, miniute, second) |
指定固定值构建 datetime对象,也支持直接构建 date 或 time |
datetime.fromtimestamp(timestamp, tz=None) |
返回 POSIX 时间戳对应的本地日期和时间,如 time.time()返回值 |
datetime.strptime(date_string, format) |
按照指定格式解析日期字符串 |
示例:
1 | |
3、格式化输出
日期对象的格式化输出借助 strftime 方法实现。
| 方法 | 描述 |
|---|---|
datetime.strftime(format) |
按照指定格式解析日期对象 |
示例:
1 | |
二、时间的数学运算
在项目开发中,我们可能会需要比较两个日期的大小,即哪个早于或者晚于哪个日期;或者对日期进行运算,增加多少秒,多少小时,多少天等操作。
1、比较运算
datetime支持向相同类型的日期直接进行数学运算比较。
注意事项:
- 需要在相同类型之间比较,不同类型之间如果需要比较,首先需要进行类型转换,例如:
date和datetime比较,需要先将datetime转为date - 不要混合比较带有时区信息和无时区信息的日期实例
| 运算符 | 描述 |
|---|---|
< |
小于 |
<= |
小于等于 |
== |
等于 |
> |
大于 |
>= |
大于等于 |
示例:
1 | |
2、时间偏移运算
日期时间的偏移计算需要使用到 timedelta ,timedelta表示一段持续的时间。
语法:
1 | |
如果需要将时间前移,设置值为负数或者直接使用 减号 -
示例:
1 | |