#PY小贴士# 在时间与字符间转换
- 2020 年 2 月 10 日
- 筆記
今天是 2019 年的最后一天。很多人都在这个特殊的日子总结过去的一年,计划新的一年。
那我们今天就来讲一讲 Python 里与时间有关的事:
如何将时间类型(datetime)与字符串类型(str)进行相互转换
这个需求在实际开发中非常常见。比如我们后台拿到的时间要在界面上显示;或者用户输入了时间,需要进行计算及保存。Python 中可以实现的方法也不止一种,其中最常见的是 strftime() 和 strptime()这两个相对的函数。
datetime.strptime(date_string, format)
这里的 p 表示 parse(也有认为是 pointer 的意思),意为 str -> time,也就是“从字符转到时间”的意思。参数 date_string 表示时间的字符串,format 是设定转换的格式,返回值是时间类型。
代码示例:
>>> import datetime >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M") >>> dt datetime.datetime(2006, 11, 21, 16, 30)
datetime.strftime(format)
这里的 f 表示 from,意为 str <- time,也就是“从时间转到字符”的意思。参数 format 是设定转换的格式,返回值是字符串。
代码示例:
>>> dt.strftime("%A, %d. %B %Y %I:%M%p") 'Tuesday, 21. November 2006 04:30PM'
注意:这两个都是 datetime 模块里的方法,但区别是,strptime 是类方法,由 datetime 类来调用;strftime 是实例方法,由一个具体的 datetime 对象来调用。
它们用到的格式化字符标记都是一致的,我们在这里也给大家列出来供参考。
附:格式化的具体代码说明
指令 |
意义 |
示例 |
---|---|---|
%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 |
%b |
当地月份的缩写。 |
Jan, Feb, …, Dec (en_US);Jan, Feb, …, Dez (de_DE) |
%B |
本地化的月份全名。 |
January, February, …, December (en_US);Januar, Februar, …, Dezember (de_DE) |
%m |
补零后,以十进制数显示的月份。 |
01, 02, …, 12 |
%y |
补零后,以十进制数表示的,不带世纪的年份。 |
00, 01, …, 99 |
%Y |
十进制数表示的带世纪的年份。 |
0001, 0002, …, 2013, 2014, …, 9998, 9999 |
%H |
以补零后的十进制数表示的小时(24 小时制)。 |
00, 01, …, 23 |
%I |
以补零后的十进制数表示的小时(12 小时制)。 |
01, 02, …, 12 |
%p |
本地化的 AM 或 PM 。 |
AM, PM (en_US);am, pm (de_DE) |
%M |
补零后,以十进制数显示的分钟。 |
00, 01, …, 59 |
%S |
补零后,以十进制数显示的秒。 |
00, 01, …, 59 |
%f |
以十进制数表示的毫秒,在左侧补零。 |
000000, 000001, …, 999999 |
%z |
UTC 偏移量,格式为 ±HHMM[SS[.ffffff]] (如果是简单型对象则为空字符串)。 |
(空), +0000, -0400, +1030, +063415, -030712.345216 |
%Z |
时区名称(如果对象为简单型则为空字符串)。 |
(空), UTC, EST, CST |
%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) |
%% |
字面的 '%' 字符。 |
% |
文档地址:
https://docs.python.org/zh-cn/3.8/library/datetime.html#strftime-and-strptime-format-codes
在 #PY小贴士#里,我们会分享一些 python 知识点、开发中的小技巧、容易踩到的坑,以及学员遇到并在群里提到真实问题。篇幅尽量短小,适合碎片时间阅读,欢迎关注!