语法分析器¶
这个模块提供了一个通用的日期/时间字符串解析器,它能够解析大多数已知格式来表示日期和/或时间。
此模块尝试原谅不太可能的输入格式,即使日期不明确也会返回日期时间对象。如果省略日期/时间戳的元素,则应用以下规则:
如果AM或PM未指定,则假定为24小时制,但12小时制为1小时制 (
0 <= hour <= 12
) must 如果指定AM或PM,则指定。如果省略时区,则返回时区naivedatetime。
如果缺少任何其他元素,则从 datetime.datetime
传递给参数的对象 default
. 如果这导致天数超过每月的有效天数,则该值将回落到月末。
可以在下面找到关于日期/时间字符串的其他格式:
功能¶
-
parser.
parse
(parserinfo=None, **kwargs)[源代码]¶ 使用
parserinfo
参数。- 参数
timestr -- 包含日期/时间戳的字符串。
parserinfo -- A
parserinfo
包含分析器参数的对象。如果None
,的默认参数parserinfo
使用构造函数。
这个
**kwargs
参数接受以下关键字参数:- 参数
default -- 默认的datetime对象,如果这是一个datetime对象而不是
None
,中指定的元素timestr
替换默认对象中的元素。ignoretz -- 如果设置
True
,则忽略解析字符串中的时区datetime
返回对象。tzinfos --
字符串中可能存在的其他时区名称/别名。此参数将时区名称(以及可选地从这些时区偏移)映射到时区。此参数可以是具有时区别名的字典,将时区名称映射到时区,也可以是接受两个参数的函数 (
tzname
和tzoffset
)并返回时区。名称映射到的时区可以是UTC的整数偏移量(秒)或
tzinfo
对象。>>> from dateutil.parser import parse >>> from dateutil.tz import gettz >>> tzinfos = {"BRST": -7200, "CST": gettz("America/Chicago")} >>> parse("2012-01-19 17:21:00 BRST", tzinfos=tzinfos) datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzoffset(u'BRST', -7200)) >>> parse("2012-01-19 17:21:00 CST", tzinfos=tzinfos) datetime.datetime(2012, 1, 19, 17, 21, tzinfo=tzfile('/usr/share/zoneinfo/America/Chicago'))
如果出现以下情况,则忽略此参数
ignoretz
被设置。dayfirst -- 是否将不明确的3整数日期(例如01/05/09)中的第一个值解释为日期 (
True
)或月 (False
)如果yearfirst
设置为True
,这区分了YDM和YMD。如果设置为None
,此值从当前parserinfo
对象(它本身默认为False
)yearfirst -- 是否将不明确的3整数日期(例如01/05/09)中的第一个值解释为年份。如果
True
,第一个数字取年份,否则最后一个数字取年份。如果设置为None
,则从当前parserinfo
对象(它本身默认为False
)fuzzy -- 是否允许模糊解析,允许字符串“今天是2047年1月1日上午8:21:00”。
fuzzy_with_tokens -- 如果
True
,fuzzy
自动设置为True,解析器将返回一个元组,其中第一个元素被解析datetime.datetime
datetimestamp和第二个元素是一个元组,它包含被忽略的字符串部分:。。医生测试::>>>来自dateutil.parserimport parse>>>parse(“今天是2047年1月1日上午8:21:00”,fuzzy_with_tokens=True)(日期时间。日期时间(2047,1,1,8,21),(u'Today is',u'',u'at'))
- 返回
返回A
datetime.datetime
对象或,如果fuzzy_with_tokens
选项是True
,返回一个元组,第一个元素是datetime.datetime
对象,第二个包含模糊标记的元组。- 引发
ParserError -- 为无效或未知的字符串格式引发,如果提供
tzinfo
格式无效,或者创建的日期无效。OverflowError -- 如果分析的日期超过系统上最大的有效C整数,则引发。
-
parser.
isoparse
(dt_str)¶ 将ISO-8601日期时间字符串解析为
datetime.datetime
.ISO-8601日期时间字符串由一个日期部分和一个可选的时间部分组成-日期和时间部分由一个单独的字符分隔符分隔,它是
T
在官方标准中。不完整的日期格式(例如YYYY-MM
)五月 not 与一段时间相结合。支持的日期格式包括:
普通:
YYYY
YYYY-MM
orYYYYMM
YYYY-MM-DD
orYYYYMMDD
不常见:
YYYY-Www
或YYYYWww
-ISO周(天默认为0)YYYY-Www-D
或YYYYWwwD
-ISO周和日
ISO周和日编号遵循与
datetime.date.isocalendar()
.支持的时间格式有:
hh
hh:mm
orhhmm
hh:mm:ss
orhhmmss
hh:mm:ss.ssssss
(最多6个次秒数字)
午夜是一个特例 hh ,因为标准同时支持00:00和24:00作为表示。小数分隔符可以是点或逗号。
警告
对秒以外的小数部分的支持是ISO-8601标准的一部分,但是目前还没有在这个解析器中实现。
支持的时区偏移格式包括:
Z (UTC)
±HH:MM
±HHMM
±HH
偏移量将表示为
dateutil.tz.tzoffset
对象,但UTC除外,它将表示为dateutil.tz.tzutc
. 时区偏移量相当于UTC(例如 +00:00 )也将表示为dateutil.tz.tzutc
.- 参数
dt_str -- 只包含ISO-8601日期时间字符串的字符串或流
- 返回
返回A
datetime.datetime
表示字符串。未指定的组件默认为其最小值。
警告
从2.7.0版开始,解析器的严格性不应被视为契约的稳定部分。任何使用默认设置正确解析的有效ISO-8601字符串在将来的版本中将继续正确解析,但当前失败的无效字符串(例如。
2017-01-01T00:00+00:00:00
)如果编码了有效日期,则不保证在将来的版本中继续失败。2.7.0 新版功能.
Classes¶
-
class
dateutil.parser.
parserinfo
(dayfirst=False, yearfirst=False)[源代码]¶ 类处理接受的输入。子类化它以自定义语言和每个参数的可接受值。
- 参数
dayfirst -- 是否将不明确的3整数日期(例如01/05/09)中的第一个值解释为日期 (
True
)或月 (False
)如果yearfirst
设置为True
,这区分了YDM和YMD。默认为False
.yearfirst -- 是否将不明确的3整数日期(例如01/05/09)中的第一个值解释为年份。如果
True
,第一个数字取年份,否则最后一个数字取年份。默认为False
.
-
AMPM
= [('am', 'a'), ('pm', 'p')]¶
-
HMS
= [('h', 'hour', 'hours'), ('m', 'minute', 'minutes'), ('s', 'second', 'seconds')]¶
-
JUMP
= [' ', '.', ',', ';', '-', '/', "'", 'at', 'on', 'and', 'ad', 'm', 't', 'of', 'st', 'nd', 'rd', 'th']¶
-
MONTHS
= [('Jan', 'January'), ('Feb', 'February'), ('Mar', 'March'), ('Apr', 'April'), ('May', 'May'), ('Jun', 'June'), ('Jul', 'July'), ('Aug', 'August'), ('Sep', 'Sept', 'September'), ('Oct', 'October'), ('Nov', 'November'), ('Dec', 'December')]¶
-
PERTAIN
= ['of']¶
-
TZOFFSET
= {}¶
-
UTCZONE
= ['UTC', 'GMT', 'Z', 'z']¶
-
WEEKDAYS
= [('Mon', 'Monday'), ('Tue', 'Tuesday'), ('Wed', 'Wednesday'), ('Thu', 'Thursday'), ('Fri', 'Friday'), ('Sat', 'Saturday'), ('Sun', 'Sunday')]¶