Python time strptime() 方法根据格式解析表示时间的字符串,可以是 UTC 时间还是本地时间。
该方法接受两个参数:一个是要解析为字符串的时间,另一个参数是指定的格式。返回值将作为对象struct_time获取。
format 参数使用与 strftime() 相同的指令;它默认为 “%a %b %d %H:%M:%S %Y” 与 ctime() 返回的格式匹配。
以下指令可以嵌入到格式字符串中 -
命令
- %a - 缩写的工作日名称
- %A - 完整的工作日名称
- %b - 缩写月份名称
- %B - 完整的月份名称
- %c - 首选日期和时间表示形式
- %C - 世纪数(年份除以 100,范围为 00 到 99)
- %d - 每月的日期(01 到 31)
- %D - 与 %m/%d/%y 相同
- %e - 每月的日期(1 到 31)
- %g - 类似于 %G,但没有世纪
- %G - 对应于 ISO 周数的 4 位数字年份(请参阅 %V)。
- %h - 与 %b 相同
- %H - 小时,使用 24 小时制(00 到 23)
- %I - 小时,使用 12 小时制(1 到 12)
- %j - 一年中的某一天(001 到 366)
- %m - 月份(01 到 12)
- %M - 分钟
- %n - 换行符
- %p - 根据给定的时间值,AM 或 PM
- %r - 以 A.M. 和 P.M. 表示法中的时间
- %R - 以 24 小时表示法的时间
- %S - 秒
- %t - 制表符
- %T - 当前时间,等于 %H:%M:%S
- %u - 工作日的数字(1 到 7),星期一 = 1。警告:在 Sun Solaris Sunday = 1 中
- %U - 当前年份的周数,从第一个星期日开始,作为第一周的第一天
- %V - 当前年份的 ISO 8601 周数(01 到 53),其中第 1 周是当年中至少有 4 天的第一周,星期一是该周的第一天
- %W - 当前年份的周数,从第一个星期一开始作为第一周的第一天
- %w - 以小数表示的星期几,Sunday=0
- %x - 不带时间的首选日期表示形式
- %X - 不带日期的首选时间表示
- %y - 没有世纪的年份(范围 00 到 99)
- %Y - 年份(包括世纪)
- %Z 或 %z - 时区、名称或缩写
- %% - 文本 % 字符
如果无法根据格式解析字符串,或者解析后字符串有多余的数据,则会引发 ValueError。
语法
以下是 Python time strptime() 方法的语法 -
time.strptime(string[, format])
参数
- string − 这是字符串格式的时间,将根据给定格式进行解析。
- format − 这是用于解析给定字符串的指令。
返回值
此返回值与 gmtime() 或 localtime() 返回的struct_time。
例以下示例显示了 Python strptime() 方法的用法。
import time
struct_time = time.strptime("30 Nov 00", "%d %b %y")
print("Returned object:", struct_time)
当我们运行上述程序时,它会产生以下结果——
Returned object: time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
例
如果没有值作为 format 参数传递给此方法,则格式将默认为 “%a %b %d %H:%M:%S %Y”,使其类似于 ctime() 方法的返回值。但是,string 参数必须包含指令的所有字段,并且顺序相同。
import time
string = "Thu Nov 30 17:34:56 2000"
struct_time = time.strptime(string)
print("Returned object:", struct_time)
输出
Returned object: time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=17, tm_min=34, tm_sec=56, tm_wday=3, tm_yday=335, tm_isdst=-1)
例
如果没有值作为 format 参数传递给方法,并且 string 参数不包含 default 指令中存在的所有字段,则该方法将引发 ValueError。让我们看一个示例,演示下面的相同内容。
import time
string = "30 Nov 00"
struct_time = time.strptime(string)
print("returned tuple:", struct_time)
输出
Traceback (most recent call last):
File "d:\qikepu\Programs\Python Time Programs\strptimedemo.py", line 4, in
struct_time = time.strptime(string)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2544.0_x64__qbz5n2kfra8p0\lib\_strptime.py", line 562, in _strptime_time
tt = _strptime(data_string, format)[0]
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2544.0_x64__qbz5n2kfra8p0\lib\_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '30 Nov 00' does not match format '%a %b %d %H:%M:%S %Y'
File "d:\qikepu\Programs\Python Time Programs\strptimedemo.py", line 4, in
struct_time = time.strptime(string)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2544.0_x64__qbz5n2kfra8p0\lib\_strptime.py", line 562, in _strptime_time
tt = _strptime(data_string, format)[0]
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2544.0_x64__qbz5n2kfra8p0\lib\_strptime.py", line 349, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '30 Nov 00' does not match format '%a %b %d %H:%M:%S %Y'