语法分析器

这个模块提供了一个通用的日期/时间字符串解析器,它能够解析大多数已知格式来表示日期和/或时间。

此模块尝试原谅不太可能的输入格式,即使日期不明确也会返回日期时间对象。如果省略日期/时间戳的元素,则应用以下规则:

  • 如果AM或PM未指定,则假定为24小时制,但12小时制为1小时制 (0 <= hour <= 12must 如果指定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 --

    字符串中可能存在的其他时区名称/别名。此参数将时区名称(以及可选地从这些时区偏移)映射到时区。此参数可以是具有时区别名的字典,将时区名称映射到时区,也可以是接受两个参数的函数 (tznametzoffset )并返回时区。

    名称映射到的时区可以是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 -- 如果 Truefuzzy 自动设置为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 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 (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')]
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 新版功能.