语法分析器

此模块提供通用日期/时间字符串解析器,能够解析大多数已知格式以表示日期和/或时间。

此模块试图原谅不太可能的输入格式,即使日期不明确也会返回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 -- 字符串中可能存在的其他时区名称/别名。此参数将时区名称(以及这些时区的偏移量(可选)映射到时区。此参数可以是具有将时区名称映射到时区的时区别名的字典,也可以是带有两个参数的函数 (tznametzoffset )并返回时区。名称映射到的时区可以是与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 -- 如果 Truefuzzy 自动设置为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 or YYYYMM

  • YYYY-MM-DD or YYYYMMDD

不常见的情况:

  • YYYY-WwwYYYYWww -ISO周(日默认为0)

  • YYYY-Www-DYYYYWwwD -ISO周和日

ISO周和日的编号遵循与相同的逻辑 datetime.date.isocalendar()

支持的时间格式包括:

  • hh

  • hh:mm or hhmm

  • hh:mm:ss or hhmmss

  • 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')]
ampm(name)[源代码]
convertyear(year, century_specified=False)[源代码]

将两位数的年份转换为 [-50, 49] 自身范围_年(当前本地时间)

hms(name)[源代码]
jump(name)[源代码]
month(name)[源代码]
pertain(name)[源代码]
tzoffset(name)[源代码]
utczone(name)[源代码]
validate(res)[源代码]
weekday(name)[源代码]

警告和例外

class dateutil.parser.ParserError[源代码]

用于分析日期时间字符串失败的异常子类。

这是的子类 ValueError ,并且应该在早期版本的 dateutil 会募集到 ValueError

在 2.8.1 版本加入.

class dateutil.parser.UnknownTimezoneWarning[源代码]

当解析器找到无法解析为tzinfo的时区时引发。

在 2.7.0 版本加入.