语法分析器¶
此模块提供通用日期/时间字符串解析器,能够解析大多数已知格式以表示日期和/或时间。
此模块试图原谅不太可能的输入格式,即使日期不明确也会返回DateTime对象。如果省略日期/时间戳的元素,将应用以下规则:
如果未指定上午或下午,则假定为24小时制,但假设为12小时制中的一小时 (
0 <= hour <= 12
) must 如果指定了AM或PM,则指定。如果省略时区,则返回时区朴素的DateTime。
如果缺少任何其他元素,则从 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
对象。。。doctest:options:+Normize_Whitespace>from dateutil.parser import parse>from dateutil.tz import gettz>tzinfos={“brst”:-7200,“cst”:gettz(“America/Chicago”)}>parse(“2012-01-19 17:21:00BRST”,tzinfos=tzinfos)datetime.datetime(2012,1,19,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:00AM”的字符串。
fuzzy_with_tokens -- 如果
True
,fuzzy
自动设置为True,解析器将返回一个元组,其中第一个元素是被分析的datetime.datetime
DateTimestamp,第二个元素是包含被忽略的字符串部分的元组:..doctest::>from dateutil.parser import parse>parse(“今天是2047年1月1日上午8:21:00AM”,FUZZY_WITH_TOKENS=True)(datetime.datetime(2047,1,1,8,21),(u‘Today is’,u‘’,u‘at’))
- 返回:
返回一个
datetime.datetime
对象,或者如果fuzzy_with_tokens
选项为True
返回一个元组,第一个元素是datetime.datetime
对象,第二个是包含模糊标记的元组。- 抛出:
ParserError -- 如果提供的字符串格式无效或未知,则引发
tzinfo
格式无效,或者是否会创建无效的日期。OverflowError -- 如果分析日期超过系统上最大的有效C整数,则引发。
- parser.isoparse(dt_str)¶
将ISO-8601日期时间字符串解析为
datetime.datetime
。ISO-8601 DATETIME字符串由日期部分组成,后跟时间部分(可选)-日期和时间部分由单个字符分隔符分隔,该字符分隔符为
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 (协调世界时)
±HH:MM
±HHMM
±HH
偏移量将表示为
dateutil.tz.tzoffset
对象,但UTC除外,它将表示为dateutil.tz.tzutc
。相当于UTC的时区偏移(例如 +00:00 )也将表示为dateutil.tz.tzutc
。- 参数:
dt_str -- 仅包含ISO-8601日期时间字符串的字符串或流
- 返回:
返回一个
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')]¶