Python strptime() 函数
提示
- 字符串转换为datetime对象:Python的
strptime()
方法可以将特定格式的字符串转换为datetime对象,例如 "21 June, 2018"。 - 格式化代码的重要性:
strptime()
方法需要字符串和格式代码完全匹配,例如"%d %B, %Y"
,以确保正确转换。 - 错误处理:如果字符串与指定的格式代码不匹配,
strptime()
方法会抛出ValueError
,提示格式不一致。
strptime()
方法从给定字符串创建一个datetime对象。
注意:并不是每个字符串都能创建datetime
对象。字符串需要符合特定的格式。
示例1:字符串转换为datetime对象
from datetime import datetime
date_string = "21 June, 2018"
print("date_string =", date_string)
print("type of date_string =", type(date_string))
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)
print("type of date_object =", type(date_object))
当您运行程序时,输出将是:
date_string = 21 June, 2018
type of date_string = <class 'str'>
date_object = 2018-06-21 00:00:00
type of date_object = <class 'datetime.datetime'>
strptime()如何工作?
strptime()
类方法接受两个参数:
- 字符串(将被转换为datetime)
- 格式代码
基于使用的字符串和格式代码,该方法返回其等效的datetime
对象。
在上述示例中:
这里,
%d
- 代表月份中的一天。例如: 01, 02, ..., 31%B
- 月份的全名。例如: January, February 等%Y
- 四位数年份。例如: 2018, 2019 等
示例2:字符串转换为datetime对象
from datetime import datetime
dt_string = "12/11/2018 09:15:32"
# 假设日期格式为dd/mm/yyyy
dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S")
print("dt_object1 =", dt_object1)
# 假设日期格式为mm/dd/yyyy
dt_object2 = datetime.strptime(dt_string, "%m/%d/%Y %H:%M:%S")
print("dt_object2 =", dt_object2)
当您运行程序时,输出将是:
dt_object1 = 2018-11-12 09:15:32
dt_object2 = 2018-12-11 09:15:32
格式代码列表
下表显示了您可以使用的所有格式代码。
指令 | 含义 | 示例 |
---|---|---|
%a | 缩写的星期几名称 | Sun, Mon, ... |
%A | 完整的星期几名称 | Sunday, Monday, ... |
%w | 十进制表示的星期几 | 0, 1, ..., 6 |
%d | 月份中的一天,前导零的十进制数 | 01, 02, ..., 31 |
%-d | 月份中的一天,十进制数 | 1, 2, ..., 30 |
%b | 缩写的月份名称 | Jan, Feb, ..., Dec |
%B | 完整的月份名称 | January, February, ... |
%m | 月份,前导零的十进制数 | 01, 02, ..., 12 |
%-m | 月份,十进制数 | 1, 2, ..., 12 |
%y | 无世纪年份,前导零的十进制数 | 00, 01, ..., 99 |
%-y | 无世纪年份,十进制数 | 0, 1, ..., 99 |
%Y | 有世纪年份,十进制数 | 2013, 2019 等 |
%H | 24小时制小时数,前导零的十进制数 | 00, 01, ..., 23 |
%-H | 24小时制小时数,十进制数 | 0, 1, ..., 23 |
%I | 12小时制小时数,前导零的十进制数 | 01, 02, ..., 12 |
%-I | 12小时制小时数,十进制数 | 1, 2, ... 12 |
%p | 本地AM或PM | AM, PM |
%M | 分钟,前导零的十进制数 | 00, 01, ..., 59 |
%-M | 分钟,十进制数 | 0, 1, ..., 59 |
%S | 秒数,前导零的十进制数 | 00, 01, ..., 59 |
%-S | 秒数,十进制数 | 0, 1, ..., 59 |
%f | 微秒,左侧零填充的十进制数 | 000000 - 999999 |
%z | UTC偏移量,格式为+HHMM或-HHMM | |
%Z | 时区名称 | |
%j | 年份中的一天,前导零的十进制数 | 001, 002, ..., 366 |
%-j | 年份中的一天,十进制数 | 1, 2, ..., 366 |
%U | 年份中的周数(以星期日为每周的第一天) | 00, 01, ..., 53 |
%W | 年份中的周数(以星期一为每周的第一天) | 00, 01, ..., 53 |
%c | 本地日期和时间的适当表示 | Mon Sep 30 07:06:05 2013 |
%x | 本地日期的适当表示 | 09/30/13 |
%X | 本地时间的适当表示 | 07:06:05 |
%% | 字面上的'%'字符 | % |
在strptime()中的ValueError
如果传递给strptime()
的字符串(第一个参数)和格式代码(第二个参数)不匹配,您将得到ValueError
。例如:
from datetime import datetime
date_string = "12/11/2018"
date_object = datetime.strptime(date_string, "%d %m %Y")
print("date_object =", date_object)
如果你运行这个程序,你会得到一个错误。
ValueError: time data '12/11/2018' does not match format '%d %m %Y'
推荐阅读: Python strftime()