Python 文档注解|strftime 和 strptime(时间格式字符串)

这篇具有很好参考价值的文章主要介绍了Python 文档注解|strftime 和 strptime(时间格式字符串)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python 3 官方文档地址:https://docs.python.org/zh-cn/3/library/datetime.html#strftime-and-strptime-behavior

文档目录层级:

  • datetime —— 基本日期和时间类型
    • strftime() 和 strptime() 的行为

本文在 Python 3 官方文档的基础上,增加注解(会用全角方括号标出)以补全含义和修正机翻的错误,并补充实例(会使用引用方法标出)。


datedatetimetime 对象都支持 strftime(format) 方法,可用来创建由一个显式格式字符串所控制的表示时间的字符串。

补充实例

>>> from datetime import date, datetime, time

date 对象的 strftime(format) 方法

>>> date.today().strftime("%Y.%m.%d %H:%M:%S.%f")
'2022.12.09 00:00:00.000000'

datetime 对象的 strftime(format) 方法

>>> datetime.now().strftime("%Y.%m.%d %H:%M:%S.%f")
'2022.12.09 13:20:39.267528'

time 对象的 strftime(format) 方法

>>> datetime.now().time().strftime("%Y.%m.%d %H:%M:%S.%f")
'1900.01.01 13:22:36.682868'

相反地,datetime.strptime() 类会根据表示日期和时间的字符串和相应的格式字符串来创建一个 datetime 对象。

补充实例

>>> datetime.strptime("2022.12.09 13:20:39.267528", "%Y.%m.%d %H:%M:%S.%f")
datetime.datetime(2022, 12, 9, 13, 20, 39, 267528)

下表提供了 strftime()strptime() 的高层级比较:

strftime strptime
用法 根据给定的格式将对象【注:datetime / date / time 】转换为字符串 将字符串解析为给定相应格式的 datetime 对象
方法类型 实例方法 类方法
方法【注:即是哪个类的方法】 datedatetimetime datetime
签名 strftime(format) strptime(date_string, format)

strftime() 和 strptime() 的格式编码

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

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

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

指令 含义 示例 备注
%G 带有世纪的 ISO 8601 年份,表示包含大部分 ISO 星期 (%V) 的年份。 0001, 0002, …, 2013, 2014, …, 9998, 9999 (8)
%u 以十进制数显示的 ISO 8601 星期中的日序号,其中 1 表示星期一。 1, 2, …, 7
%V 以十进制数显示的 ISO 8601 星期,以星期一作为每周的第一天。 第 01 周为包含 1 月 4 日的星期。 01, 02, …, 53 (8), (9)

官方版本变化梳理

在 3.6 及之后的版本中,新增了 %G, %u%V

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

官方文档备注汇总

See R. H. van Gent’s guide to the mathematics of the ISO 8601 calendar for a good explanation.

补充实例

>>> datetime(2023,2,28).strftime("%G %u %V")
'2023 2 09'

技术细节

总体而言,d.strftime(fmt) 类似于 time 模块的 time.strftime(fmt, d.timetuple()),但是并非所有对象都支持 timetuple() 方法。

对于 datetime.strptime() 类方法,默认值为 1900-01-01T00:00:00.000: 任何未在格式字符串中指定的部分都将从默认值中提取。

官方文档备注

传入 datetime.strptime('Feb 29', '%b %d') 将导致错误,因为 1900 不是闰年。

补充样例

>>> datetime.strptime('Feb 29', '%b %d')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Program Files\Python39\lib\_strptime.py", line 579, in _strptime_datetime
 return cls(*args)
ValueError: day is out of range for month

使用 datetime.strptime(date_string, format) 等价于:

datetime(*(time.strptime(date_string, format)[0:6]))

除非格式中包含秒以下的部分或时区差值信息,它们在 datetime.strptime 中受支持但会被 time.strptime 所丢弃。

对于 time 对象,年、月、日的格式代码不应被使用,因为 time 对象没有这些值。 如果它们被使用,则年份将被替换为 1900,而月和日将被替换为 1

补充样例

>>> time(13, 31, 15).strftime("%Y.%m.%d")
'1900.01.01'

对于 date 对象,时、分、秒和微秒的格式代码不应被使用,因为 date 对象没有这些值。 如果它们被使用,则它们都将被替换为 0

补充样例

>>> date(2023, 2, 28).strftime("%H:%H:%S.%f")
'00:00:00.000000'

出于相同的原因,对于包含当前区域设置字符集所无法表示的 Unicode 码位的格式字符串的处理方式也取决于具体平台。在某些平台上这样的码位会不加修改地原样输出,而在其他平台上 strftime 则可能引发 UnicodeError 或只返回一个空字符串。

注释

备注 (1)

由于此格式依赖于当前区域设置,因此对具体输出值应当保持谨慎预期。字段顺序会发生改变(例如 “month/day/year” 与 “day/month/year”),并且输出可能包含使用区域设置所指定的默认编码格式的 Unicode 字符(例如如果当前区域为 ja_JP,则默认编码格式可能为 eucJP, SJISutf-8 中的一个;使用 locale.getlocale() 可确定当前区域设置的编码格式)。

补充实例

>>> import locale
>>> locale.getlocale()
('Chinese (Simplified)_China', '936')
备注 (2)

strptime() 方法能够解析整个 [1, 9999] 范围内的年份,但 < 1000 的年份必须加零填充为 4 位数字宽度。

官方版本变化梳理

在 3.2 之前的版本中,strftime() 方法只限于 >= 1900 的年份;

在 3.2 版本中,strftime() 方法只限于 years >= 1000 的年份;

在 3.3 及之后的版本中,strftime() 方法能够解析 [1, 9999] 的年份。

备注 (3)

当与 strptime() 方法一起使用时,如果使用 %I 指令来解析小时,%p 指令只影响输出小时字段。

备注 (4)

time 模块不同的是, datetime 模块不支持闰秒。

备注 (5)

当与 strptime() 方法一起使用时,%f 指令可接受一至六个数码及左边的零填充。 %f 是对 C 标准中格式字符集的扩展(但单独在 datetime 对象中实现,因此它总是可用)。

备注 (6)

对于简单型对象,%z and %Z 格式代码会被替换为空字符串。对于一个感知型对象而言:

%zutcoffset() 会被转换为 ±HHMM[SS[.ffffff]] 形式的字符串,其中 HH 为给出 UTC 时差的小时部分的 2 位数码字符串,MM 为给出 UTC 时差的分钟部分的 2 位数码字符串,SS 为给出 UTC 时差的秒部分的 2 位数码字符串,而 ffffff 为给出 UTC 时差的微秒部分的 6 位数码字符串。 当时差为整数秒时 ffffff 部分将被省略,而当时差为整数分钟时 ffffffSS 部分都将被省略。 例如,如果 utcoffset() 返回 timedelta(hours=-3, minutes=-30),则 %z 会被替换为字符串 '-0330'

官方版本变化梳理

在 3.7 版本更新:

  • UTC 时差不再限制为一个整数分钟值。
  • 当提供 %z 指令给 strptime() 方法时,UTC 差值可以在时、分和秒之间使用冒号分隔符。 例如,'+01:00:00' 将被解读为一小时的差值。 此外,提供 'Z' 就相当于 '+00:00'

%Z:在 strftime() 中,如果 tzname() 返回 None%Z 会被替换为一个空字符串;在其他情况下 %Z 会被替换为返回值,该值必须为一个字符串。strptime() 仅接受特定的 %Z 值:你的机器的区域设置可以是 time.tzname 中的任何值硬编码的值 UTCGMT这样生活在日本的人可用的值为 JST, UTCGMT,但可能没有 EST。 它将引发 ValueError 表示无效的值。

官方版本变化梳理

在 3.2 版本更新:当提供 %z 指令给 strptime() 方法时,将产生一个感知型 datetime 对象。 结果的 tzinfo 将被设为一个 timezone 实例。

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

备注 (7)

当与 strptime() 方法一起使用时,%U%W 仅用于指定星期几和日历年份 (%Y) 的计算。

注释 (8)

类似于 %U%W%V 仅用于在 strptime() 格式字符串中指定星期几和 ISO 年份 (%G) 的计算。 还要注意 %G%Y 是不可交换的。

注释 (9)

When used with the strptime() method, the leading zero is optional for formats %d, %m, %H, %I, %M, %S, %j, %U, %W, and %V. Format %y does require a leading zero.文章来源地址https://www.toymoban.com/news/detail-772372.html

到了这里,关于Python 文档注解|strftime 和 strptime(时间格式字符串)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pg使用sql将文本字符串转换成时间格式

    使用 PostgreSQL 数据库的 SQL 查询语句将文本字符串转换为时间格式,可以使用 to_timestamp 函数。 假设您的文本字符串时间格式为 “yyyy-MM-dd HH:mm:ss”,您可以使用以下 SQL 查询来转换: 这将返回一个时间戳类型的结果,其中包含从文本字符串转换而来的时间。 您可以在您的

    2024年02月12日
    浏览(60)
  • 前端中不同格式的日期相互转换(字符串、时间戳)js相关

    在项目中遇到了,需要实现字符串和Unix时间戳的相互转换,随手记录一下。 我使用的组件库为Naive UI,涉及到的组件为日期选择器(Date Picker)。作者在文档中写道: 实话说我不喜欢这个 feature,因为多数情况下,传递时间字符串不是个最佳实践。但是现实世界是复杂的,我

    2024年02月02日
    浏览(66)
  • JS日期与字符串相互转换(时间格式化YYYY-MM-DD,Dayjs的使用)

    文章内容 文章链接 JS数组对象—— 根据日期进行排序 , 按照时间进行升序或降序排序 https://blog.csdn.net/XSL_HR/article/details/128579840?spm=1001.2014.3001.5501 JS日期时间格式化—— 数字日期转中文日期 (封装函数,dayjs转换时间格式) https://blog.csdn.net/XSL_HR/article/details/128607024?spm=100

    2024年01月18日
    浏览(73)
  • Python学习之DateTime、TimeDelta、Strftime(Format)及其示例

    在Python中,date,time和datetime类提供了许多函数来处理日期、时间和时间间隔(time interval)。 Date和DateTime是Python中的对象,因此在操作它们时,实际上是在操作对象,而不是字符串或时间戳。每当您操纵日期或时间时,都需要导入DateTime函数。 Python中的DateTime类主要分为5类。

    2024年02月04日
    浏览(47)
  • [22007] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]从字符串转换日期和/或时间时,转换失败。 (241)过滤非法日期格式数据

    出现这个错误是因为你在SQL Server中尝试将一个无效的字符串转换为日期或时间格式。为了解决这个问题,你需要过滤掉不合法的数据。 你可以使用TRY_CONVERT函数来尝试将字符串转换为日期或时间格式,如果转换失败,则返回NULL。然后你可以使用IS NOT NULL来过滤掉这些NULL值。

    2024年02月08日
    浏览(85)
  • 【Python入门篇】——Python基础语法(字符串格式化,表达式格式化和数据输入)

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句,Python函数,Python的数据容器等。 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 目前通过%符号占位

    2024年02月05日
    浏览(56)
  • Python 的字符串格式化指南

    Python 中控制字符串格式通常有三种形式: % 占位符(格式化符) str.format() 函数 f-string 内嵌式 Python 最先开始格式化字符串是用 %,但它的致命缺点是支持的类型有限制,只支持 int,str,double 这三种类型,从而导致其他所有类型只能转换(强制转换)为这几个类型,还有如果

    2024年02月08日
    浏览(55)
  • Python字符串格式化 (%操作符)

    在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。在Python中内置有对字符串进行格式化的操作符是\\\"%\\\"。 模板 格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的

    2024年02月14日
    浏览(48)
  • Python - logging.Formatter 的常用格式字符串

    格式字符串 作用 %(name)s 日志记录器的名称(记录通道) %(levelno)s 日志记录级别的数字 DEBUG=10 、INFO=20 、WARNING=30 、ERROR=40 、CRITICAL=50 %(levelname)s 日志 记录级别的文本 “DEBUG” 、“INFO” 、“WARNING” 、“ERROR” 、“CRITICAL” %(pathname)s 日志调用的源文件的完整路径名 %(filename)s 日

    2023年04月13日
    浏览(33)
  • Python 用户输入和字符串格式化指南

    Python 允许用户输入数据。这意味着我们可以向用户询问输入。在 Python 3.6 中,使用 input() 方法来获取用户输入。在 Python 2.7 中,使用 raw_input() 方法来获取用户输入。以下示例要求用户输入用户名,并在输入用户名后将其打印在屏幕上: Python 3.6: Python 2.7: 为了确保字符串按预

    2024年02月05日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包