前言

Python 日期和时间。

操作系统:Windows 11 家庭中文版

参考文档

  1. 日期和时间
  2. strftime() 和 strptime() 格式码

示例

datetime 模块提供了以简单和复杂的方式操作日期和时间的类。虽然支持日期和时间算法,但实现的重点是有效的成员提取以进行输出格式化和操作。该模块还支持可感知时区的对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> # dates are easily constructed and formatted
>>> from datetime import date
>>> now = date.today()
>>> now
datetime.date(2003, 12, 2)
>>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
'12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

>>> # dates support calendar arithmetic
>>> birthday = date(1964, 7, 31)
>>> age = now - birthday
>>> age.days
14368

strftime() 和 strptime() 格式码

这些方法接受可被用于解析和格式化日期的格式代码:

1
2
3
4
5
>>> datetime.strptime('31/01/22 23:59:59.999999',
... '%d/%m/%y %H:%M:%S.%f')
datetime.datetime(2022, 1, 31, 23, 59, 59, 999999)
>>> _.strftime('%a %d %b %Y, %I:%M%p')
'Mon 31 Jan 2022, 11:59PM'

以下列表显示了 1989 版 C 标准所要求的全部格式代码,它们在带有标准 C 实现的所有平台上均可用。

指令 含意 示例 常用
%a 当地工作日的缩写。 Sun, Mon, ..., Sat (en_US); So, Mo, ..., Sa (de_DE)
%A 本地化的星期中每日的完整名称。 Sunday, Monday, ..., Saturday (en_US); Sonntag, Montag, ..., Samstag (de_DE)
%w 以十进制数显示的工作日,其中0表示星期日,6表示星期六。 0, 1, ..., 6
%d 补零后,以十进制数显示的月份中的一天。 01, 02, ..., 31 True
%b 当地月份的缩写。 Jan, Feb, ..., Dec (en_US); Jan, Feb, ..., Dez (de_DE) True
%B 本地化的月份全名。 January, February, ..., December (en_US); Januar, Februar, ..., Dezember (de_DE)
%m 补零后,以十进制数显示的月份。 01, 02, ..., 12 True
%y 补零后,以十进制数表示的,不带世纪的年份。 00, 01, ..., 99
%Y 十进制数表示的带世纪的年份。 0001, 0002, ..., 2013, 2014, ..., 9998, 9999 True
%H 以补零后的十进制数表示的小时(24 小时制)。 00, 01, ..., 23 True
%I 以补零后的十进制数表示的小时(12 小时制)。 01, 02, ..., 12
%p 本地化的 AM 或 PM 。 AM, PM (en_US); am, pm (de_DE)
%M 补零后,以十进制数显示的分钟。 00, 01, ..., 59 True
%S 补零后,以十进制数显示的秒。 00, 01, ..., 59 True
%f 微秒作为一个十进制数,零填充到 6 位。 000000, 000001, ..., 999999
%z UTC 偏移量,格式为 ±HHMM[SS[.ffffff]] (如果是简单型对象则为空字符串)。 (空), +0000, -0400, +1030, +063415, -030712.345216
%Z 时区名称(如果对象为简单型则为空字符串)。 (空), UTC, GMT
%j 以补零后的十进制数表示的一年中的日序号。 001, 002, ..., 366
%U 以补零后的十进制数表示的一年中的周序号(星期日作为每周的第一天)。 在新的一年中第一个星期日之前的所有日子都被视为是在第 0 周。 00, 01, ..., 53
%W 以补零后的十进制数表示的一年中的周序号(星期一作为每周的第一天)。 在新的一年中第一个星期一之前的所有日子都被视为是在第 0 周。 00, 01, ..., 53
%c 本地化的适当日期和时间表示。 Tue Aug 16 21:30:00 1988 (en_US); Di 16 Aug 21:30:00 1988 (de_DE)
%x 本地化的适当日期表示。 08/16/88 (None); 08/16/1988 (en_US); 16.08.1988 (de_DE)
%X 本地化的适当时间表示。 21:30:00 (en_US); 21:30:00 (de_DE)
%% 字面的 '%' 字符。 %

为了方便起见,还包括了C89标准不需要的其他一些指示符。 这些参数都对应于 ISO 8601 日期值。

指令 含意 示例
%G 带有世纪的 ISO 8601 年份,表示包含大部分 ISO 星期 (%V) 的年份。 0001, 0002, ..., 2013, 2014, ..., 9998, 9999
%u 以十进制数显示的 ISO 8601 星期中的日序号,其中 1 表示星期一。 1, 2, ..., 7
%V 以十进制数显示的 ISO 8601 星期,以星期一作为每周的第一天。 01, 02, ..., 53
%:z ±HH:MM[:SS[.ffffff]] 形式的 UTC 偏移量(如果是简单型对象则为空字符串)。 (空), +00:00, -04:00, +10:30, +06:34:15, -03:07:12.345216

这些代码可能不是在所有平台上都可与 strftime() 方法配合使用。 ISO 8601 年份和 ISO 8601 星期指示符并不能与上面的年份和星期序号指示符相互替代。 调用 strptime() 时传入不完整或有歧义的 ISO 8601 指示符将引发 ValueError

对完整格式代码集的支持在不同平台上有所差异,因为 Python 要调用所在平台的 C 库的 strftime() 函数,而不同平台的差异是很常见的。 要查看你所用平台所支持的完整格式代码集,请参阅 strftime(3) 文档。 不同的平台在处理不支持的格式说明符方面也有差异。

Added in version 3.6: 增加了 %G, %u%V

Added in version 3.12: 增加了 %:z

结语

第一百二十篇博文写完,开心!!!!

今天,也是充满希望的一天。