跳转到主要内容

此包提供DateTime数据类型,类似于Zope。除非您需要与Zope API通信,否则您可能最好使用Python的内置datetime模块。

项目描述

CI status Current version on PyPI Supported Python versions

DateTime

此包提供DateTime数据类型,类似于Zope。

除非您需要与Zope API通信,否则您可能最好使用Python的内置datetime模块。

有关进一步文档,请参阅 src/DateTime/DateTime.txt

DateTime包

日期/时间值的封装。

Timezones()函数

返回识别的时间区域名称列表

>>> from DateTime import Timezones
>>> zones = set(Timezones())

几乎包含所有标准pytz时间区域,除了某些常用但模糊的缩写,这些缩写与pytz使用的名称冲突

>>> import pytz
>>> [x for x in pytz.all_timezones if x not in zones]
['CET', 'EET', 'EST', 'MET', 'MST', 'WET']

DateTime类

DateTime对象表示时间点,并提供了控制其表示形式而不影响对象绝对值的接口。

DateTime对象可以从各种字符串或数值数据中创建,也可以从其他DateTime对象中计算得出。DateTimes支持将它们的表示形式转换为许多主要时间区域,以及能够在给定时间区域的上下文中创建DateTime对象。

DateTime对象提供部分数值行为

  • 两个日期时间对象可以相减以获得时间,即两个日期之间的天数。

  • 一个日期时间对象和一个正数或负数可以相加,以获得一个新日期时间对象,该对象比输入日期时间对象晚给定天数。

  • 一个正数或负数和一个日期时间对象可以相加,以获得一个新日期时间对象,该对象比输入日期时间对象晚给定天数。

  • 可以从日期时间对象中减去一个正数或负数,以获得一个新日期时间对象,该对象比输入日期时间对象早给定天数。

可以使用标准的int、long和float函数将DateTime对象转换为自1901年1月1日以来的整数、长整数或浮点数天数(兼容性说明:int、long和float返回GMT而非本地机器时区自1901年以来的天数)。DateTime对象还提供对以浮点格式表示其值的访问,这种格式可用于Python time模块,前提是该对象的值位于基于纪元的time模块的范围内。

应将DateTime对象视为不可变;所有转换和数值操作都返回一个新的DateTime对象,而不是修改当前对象。

DateTime对象始终以绝对UTC时间的形式维护其值,并基于创建对象时使用的参数在某个时间区域的上下文中表示。DateTime对象的方法返回基于时间区域上下文的值。

请注意,在所有情况下,如果没有指定时间区域,则使用本地机器时区进行表示。

DateTime构造函数

DateTime()返回一个新的日期时间对象。DateTimes可以使用零到七个参数创建

  • 如果没有参数调用该函数,则返回当前日期/时间,表示为本地机器的时间区域。

  • 如果使用单个字符串参数调用该函数,该参数是识别的时间区域名称,则返回表示当前时间的对象,表示为指定的时间区域。

  • 如果使用单个表示有效日期/时间的字符串参数调用该函数,则返回表示该日期/时间的对象。

    一般来说,任何日期时间表示形式,如果对北美居民来说是可识别和明确的,都是可接受的。(这种资格的限制是因为在北美,像2/1/1994这样的日期被解释为1994年2月1日,而在世界的一些其他地方,它被解释为1994年1月2日。)日期/时间字符串由两个部分组成,一个日期部分和一个可选的时间部分,由一个或多个空格分隔。如果省略时间部分,则假定是午夜12:00。

    日期/时间字符串的最后一个元素指定的任何已识别时区名称将被用于计算日期/时间值。(如果您使用字符串“Mar 9, 1997 1:45pm US/Pacific”创建一个DateTime对象,其值基本上与在指定时区机器上捕获time.time()在该日期和时间的时间值相同)。如果没有传递时区,则将使用本地计算机上配置的时区,如果日期格式符合ISO 8601(‘YYYY-MM-DD’),则实例将使用UTC/GMT+0作为时区。

    o 返回当前日期/时间,表示为美国东部时间

    >>> from DateTime import DateTime
    >>> e = DateTime('US/Eastern')
    >>> e.timezone()
    'US/Eastern'
    

    o 返回指定时间,表示为本地计算机时区

    >>> x = DateTime('1997/3/9 1:45pm')
    >>> x.parts() # doctest: +ELLIPSIS
    (1997, 3, 9, 13, 45, ...)
    

    o 指定时区在本地计算机中的时间,详细格式

    >>> y = DateTime('Mar 9, 1997 13:45:00')
    >>> y.parts() # doctest: +ELLIPSIS
    (1997, 3, 9, 13, 45, ...)
    >>> y == x
    True
    

    o 指定时区通过ISO 8601规则表示的UTC时间

    >>> z = DateTime('2014-03-24')
    >>> z.parts() # doctest: +ELLIPSIS
    (2014, 3, 24, 0, 0, ...)
    >>> z.timezone()
    'GMT+0'
    

    日期部分由年、月和日值组成。年值必须是一个一位、两位或四位整数。如果使用一位或两位数年,则假定该年属于20世纪。月份可以是1到12的整数,月份名称或月份缩写,其中缩写后可以有一个可选的句号。日必须是1到该月天数的整数。年、月和日值可以由点、破折号、正斜杠或空格分隔。允许在分隔符周围有额外的空格。只要可以区分组件,年、月和日值的顺序可以是任意的。如果所有三个组件都是小于13的数字,则假定是月-日-年顺序。

    时间部分由小时、分钟和秒值组成,由冒号分隔。小时值必须是0到23的整数。分钟值必须是0到59的整数。秒值可以是0到59.999的整数。秒值或分钟和秒值可以省略。时间后可以跟am或pm(大写或小写),在这种情况下假定是12小时制。

  • 如果DateTime函数用一个单一的数字参数调用,则假定该数字是浮点值,如time.time()返回的值,或者是从1901年1月1日00:00:00 UTC之后的日数。

    返回一个DateTime对象,表示time.time()浮点数在本地计算机时区的GMT值,或从1901年1月1日之后的日数。请注意,从1901年之后的日数需要从本地计算机时区的角度表达。负数参数将产生在1901年之前的日期/时间值。

  • 如果函数用两个数字参数调用,则第一个参数被视为整数年,第二个参数被视为从年初开始的偏移天数,在本地计算机时区的上下文中。返回的日期/时间值是给定年份起始偏移天数,表示为本地计算机时区。

  • 如果函数用两个参数调用,第一个参数是一个表示GMT(如time.time()返回的)自纪元以来的秒数的浮点数,第二个参数是一个命名已识别时区的字符串,则返回一个具有该GMT时间的DateTime对象,表示为给定时区。

    >>> import time
    >>> t = time.time()
    

    时间t表示为美国东部时间

    >>> now_east = DateTime(t, 'US/Eastern')
    

    时间t表示为美国太平洋时间

    >>> now_west = DateTime(t, 'US/Pacific')
    

    它们的表现形式不同

    >>> now_east.equalTo(now_west)
    True
    
  • 如果函数被调用时带有三个或更多数字参数,则第一个参数被视为整数年份,第二个参数被视为整数月份,第三个参数被视为整数日期。如果这些值的组合无效,则将引发DateTimeError。年份为69及以下的个位数或两位数被视为21世纪,而70-99的值则被视为20世纪。第四、第五和第六个参数是浮点数,表示小时、分钟和天数的正负偏移量,如果未指定,则默认为零。可以作为最后一个可选参数给出一个字符串,以指示时区(这种效果相当于在那个时区的机器上获取time.time()的值)。

如果传递给DateTime构造函数的字符串参数无法解析,则将引发SyntaxError。无效的日期、时间或时区组件将引发DateTimeError。

模块函数Timezones()将返回DateTime模块所认可时区列表。时区名称的识别不区分大小写。

DateTime实例方法(IDateTime接口)

转换和比较方法

  • timeTime()返回UTC日期/时间作为浮点数,使用Python time模块的格式。请注意,使用DateTime可以创建没有对time模块有意义的日期/时间值,在这种情况下将引发DateTimeError。DateTime对象的值通常必须在1970年1月1日(或您的本地机器纪元)和2038年1月之间,才能生成有效的time.time()样式值。

    >>> dt = DateTime('Mar 9, 1997 13:45:00 US/Eastern')
    >>> dt.timeTime()
    857933100.0
    
    >>> DateTime('2040/01/01 UTC').timeTime()
    2208988800.0
    
    >>> DateTime('1900/01/01 UTC').timeTime()
    -2208988800.0
    
  • toZone(z)返回一个DateTime对象,其值表示为当前对象在指定时区中的表示

    >>> dt.toZone('UTC')
    DateTime('1997/03/09 18:45:00 UTC')
    
    >>> dt.toZone('UTC').equalTo(dt)
    True
    
  • isFuture()返回true,如果此对象表示的日期/时间晚于调用时间

    >>> dt.isFuture()
    False
    >>> DateTime('Jan 1 3000').isFuture() # not time-machine safe!
    True
    
  • isPast()返回true,如果此对象表示的日期/时间早于调用时间

    >>> dt.isPast()
    True
    >>> DateTime('Jan 1 3000').isPast() # not time-machine safe!
    False
    
  • isCurrentYear()返回true,如果此对象表示的日期/时间在当前对象时区表示的当前年份内

    >>> dt.isCurrentYear()
    False
    >>> DateTime().isCurrentYear()
    True
    
  • isCurrentMonth()返回true,如果此对象表示的日期/时间在当前对象时区表示的当前月份内

    >>> dt.isCurrentMonth()
    False
    >>> DateTime().isCurrentMonth()
    True
    
  • isCurrentDay()返回true,如果此对象表示的日期/时间在当前对象时区表示的当前天内

    >>> dt.isCurrentDay()
    False
    >>> DateTime().isCurrentDay()
    True
    
  • isCurrentHour()返回true,如果此对象表示的日期/时间在当前对象时区表示的当前小时内

    >>> dt.isCurrentHour()
    False
    
    >>> DateTime().isCurrentHour()
    True
    
  • isCurrentMinute()返回true,如果此对象表示的日期/时间在当前对象时区表示的当前分钟内

    >>> dt.isCurrentMinute()
    False
    >>> DateTime().isCurrentMinute()
    True
    
  • isLeapYear()返回true,如果当前年份(在对象时区范围内)是闰年

    >>> dt.isLeapYear()
    False
    >>> DateTime('Mar 8 2004').isLeapYear()
    True
    
  • earliestTime()返回一个新DateTime对象,表示当前对象时区范围内当前天最早可能的整秒时间

    earliest possible time (in whole seconds) that still falls within the current object’s day, in the object’s timezone context

    >>> dt.earliestTime()
    DateTime('1997/03/09 00:00:00 US/Eastern')
    
  • latestTime()返回一个新DateTime对象,表示当前对象时区范围内当前天最晚可能的整秒时间

    >>> dt.latestTime()
    DateTime('1997/03/09 23:59:59 US/Eastern')
    

组件访问

  • parts()返回一个包含对象日历年、月份、日期、小时、分钟、秒和时区的元组

    >>> dt.parts() # doctest: +ELLIPSIS
    (1997, 3, 9, 13, 45, ... 'US/Eastern')
    
  • timezone()返回对象所表示的时区

    >>> dt.timezone() in Timezones()
    True
    
  • tzoffset()返回对象的时区偏移量

    >>> dt.tzoffset()
    -18000
    
  • year()返回对象的日历年

    >>> dt.year()
    1997
    
  • month()返回对象的月份作为整数

    >>> dt.month()
    3
    
  • Month()返回完整的月份名称

    >>> dt.Month()
    'March'
    
  • aMonth()返回缩写的月份名称

    >>> dt.aMonth()
    'Mar'
    
  • pMonth() 返回带点的缩写月份名称

    >>> dt.pMonth()
    'Mar.'
    
  • day() 返回整数天数

    >>> dt.day()
    9
    
  • Day() 返回星期几的完整名称

    >>> dt.Day()
    'Sunday'
    
  • dayOfYear() 返回年份中的天数,针对对象的时区表示

    >>> dt.dayOfYear()
    68
    
  • aDay() 返回星期几的缩写名称

    >>> dt.aDay()
    'Sun'
    
  • pDay() 返回带点的星期几缩写名称

    >>> dt.pDay()
    'Sun.'
    
  • dow() 返回星期几的整数,其中星期日为0

    >>> dt.dow()
    0
    
  • dow_1() 返回星期几的整数,其中星期日为1

    >>> dt.dow_1()
    1
    
  • h_12() 返回12小时制的时钟小时表示

    >>> dt.h_12()
    1
    
  • h_24() 返回24小时制的时钟小时表示

    >>> dt.h_24()
    13
    
  • ampm() 返回适当的时间修饰符(上午或下午)

    >>> dt.ampm()
    'pm'
    
  • hour() 返回24小时制的时钟小时表示

    >>> dt.hour()
    13
    
  • minute() 返回分钟

    >>> dt.minute()
    45
    
  • second() 返回秒

    >>> dt.second() == 0
    True
    
  • millis() 返回GMT以来纪元的毫秒数

    >>> dt.millis() == 857933100000
    True
    

strftime()

请参阅 tests/test_datetime.py.

从之前的DateTime获取的通用格式

  • Date() 返回对象的日期字符串

    >>> dt.Date()
    '1997/03/09'
    
  • Time() 返回对象的时间字符串,精确到秒

    >>> dt.Time()
    '13:45:00'
    
  • TimeMinutes() 返回对象的时间字符串,不显示秒

    >>> dt.TimeMinutes()
    '13:45'
    
  • AMPM() 返回对象的时间字符串,精确到秒

    >>> dt.AMPM()
    '01:45:00 pm'
    
  • AMPMMinutes() 返回对象的时间字符串,不显示秒

    >>> dt.AMPMMinutes()
    '01:45 pm'
    
  • PreciseTime() 返回对象的时间字符串

    >>> dt.PreciseTime()
    '13:45:00.000'
    
  • PreciseAMPM() 返回对象的时间字符串

    >>> dt.PreciseAMPM()
    '01:45:00.000 pm'
    
  • yy() 返回2位数字的日历年份

    >>> dt.yy()
    '97'
    
  • mm() 返回2位数字的月份

    >>> dt.mm()
    '03'
    
  • dd() 返回2位数字的天数

    >>> dt.dd()
    '09'
    
  • rfc822() 返回RFC 822格式的日期

    >>> dt.rfc822()
    'Sun, 09 Mar 1997 13:45:00 -0500'
    

新格式

  • fCommon() 返回表示对象值的字符串,格式为:1997年3月9日 1:45 pm

    >>> dt.fCommon()
    'March 9, 1997 1:45 pm'
    
  • fCommonZ() 返回表示对象值的字符串,格式为:1997年3月9日 1:45 pm US/Eastern

    >>> dt.fCommonZ()
    'March 9, 1997 1:45 pm US/Eastern'
    
  • aCommon() 返回表示对象值的字符串,格式为:Mar 9, 1997 1:45 pm

    >>> dt.aCommon()
    'Mar 9, 1997 1:45 pm'
    
  • aCommonZ() 返回表示对象值的字符串,格式为:Mar 9, 1997 1:45 pm US/Eastern

    >>> dt.aCommonZ()
    'Mar 9, 1997 1:45 pm US/Eastern'
    
  • pCommon() 返回表示对象值的字符串,格式为:Mar. 9, 1997 1:45 pm

    >>> dt.pCommon()
    'Mar. 9, 1997 1:45 pm'
    
  • pCommonZ() 返回表示对象值的字符串,格式为:Mar. 9, 1997 1:45 pm US/Eastern

    >>> dt.pCommonZ()
    'Mar. 9, 1997 1:45 pm US/Eastern'
    
  • ISO() 返回ISO格式的日期/时间字符串。注意:这不是ISO 8601格式!有关ISO 8601兼容的输出,请参阅下面的ISO8601和HTML4方法。日期输出为:YYYY-MM-DD HH:MM:SS

    >>> dt.ISO()
    '1997-03-09 13:45:00'
    
  • ISO8601() 返回ISO 8601兼容格式的对象,包含日期、带有秒精度的日期和时间以及时区标识符 - 请参阅 http://www.w3.org/TR/NOTE-datetime。日期输出为:YYYY-MM-DDTHH:MM:SSTZD(T是字面字符,TZD是时区设计符,格式为+HH:MM或-HH:MM)。

    下面的 HTML4() 方法提供相同的格式,但在返回值之前将其转换为UTC,并设置TZD为“Z”

    >>> dt.ISO8601()
    '1997-03-09T13:45:00-05:00'
    
  • HTML4() 返回的格式符合 HTML4.0 规范,是 ISO8601 的标准形式之一。详见 http://www.w3.org/TR/NOTE-datetime。日期输出格式为:YYYY-MM-DDTHH:MM:SSZ(T,Z为文字字符,时间以 UTC 为准。)

    >>> dt.HTML4()
    '1997-03-09T18:45:00Z'
    
  • JulianDay() 返回根据 http://www.tondering.dk/claus/cal/node3.html#sec-calcjd 的儒略日。

    >>> dt.JulianDay()
    2450517
    
  • week() 返回按照 ISO 计算的周数。详见 http://www.tondering.dk/claus/cal/node6.html#SECTION00670000000000000000

    >>> dt.week()
    10
    

已弃用的API

  • DayOfWeek(): see Day()

  • Day_(): see pDay()

  • Mon(): see aMonth()

  • Mon_(): see pMonth

DateTime提供的通用服务

DateTime 对象可以被 repr() 表示;结果将是一个字符串,表示如何创建与这个 DateTime 对象相似的 DateTime 对象

>>> repr(dt)
"DateTime('1997/03/09 13:45:00 US/Eastern')"

当我们把它们转换成字符串时,我们会得到一个更易读的字符串,实际上可以展示给用户

>>> str(dt)
'1997/03/09 13:45:00 US/Eastern'

DateTime 的哈希值基于日期和时间,对于 DateTime 的不同表示形式是相同的

>>> hash(dt)
3618678
>>> hash(dt.toZone('UTC'))
3618678

DateTime 对象可以使用 equalTo 方法与其他 DateTime 对象或浮点数(如 Python time 模块返回的浮点数)进行比较。使用此 API,如果对象表示的日期/时间等于指定的 DateTime 或 time 模块样式的时间,则返回 True

>>> dt.equalTo(dt)
True
>>> dt.equalTo(dt.toZone('UTC'))
True
>>> dt.equalTo(dt.timeTime())
True
>>> dt.equalTo(DateTime())
False

不等式也是如此

>>> dt.notEqualTo(dt)
False
>>> dt.notEqualTo(dt.toZone('UTC'))
False
>>> dt.notEqualTo(dt.timeTime())
False
>>> dt.notEqualTo(DateTime())
True

常规的相等运算仅适用于 DateTime 对象,并考虑时区设置

>>> dt == dt
True
>>> dt == dt.toZone('UTC')
False
>>> dt == DateTime()
False
>>> dt != dt
False
>>> dt != dt.toZone('UTC')
True
>>> dt != DateTime()
True

但其他比较操作比较的是参考时间点,而不是表示本身

>>> dt > dt
False
>>> DateTime() > dt
True
>>> dt > DateTime().timeTime()
False
>>> DateTime().timeTime() > dt
True
>>> dt.greaterThan(dt)
False
>>> DateTime().greaterThan(dt)
True
>>> dt.greaterThan(DateTime().timeTime())
False
>>> dt >= dt
True
>>> DateTime() >= dt
True
>>> dt >= DateTime().timeTime()
False
>>> DateTime().timeTime() >= dt
True
>>> dt.greaterThanEqualTo(dt)
True
>>> DateTime().greaterThanEqualTo(dt)
True
>>> dt.greaterThanEqualTo(DateTime().timeTime())
False
>>> dt < dt
False
>>> DateTime() < dt
False
>>> dt < DateTime().timeTime()
True
>>> DateTime().timeTime() < dt
False
>>> dt.lessThan(dt)
False
>>> DateTime().lessThan(dt)
False
>>> dt.lessThan(DateTime().timeTime())
True
>>> dt <= dt
True
>>> DateTime() <= dt
False
>>> dt <= DateTime().timeTime()
True
>>> DateTime().timeTime() <= dt
False
>>> dt.lessThanEqualTo(dt)
True
>>> DateTime().lessThanEqualTo(dt)
False
>>> dt.lessThanEqualTo(DateTime().timeTime())
True

DateTime提供的数值服务

DateTime 可以加到一个数字上,一个数字也可以加到 DateTime 上

>>> dt + 5
DateTime('1997/03/14 13:45:00 US/Eastern')
>>> 5 + dt
DateTime('1997/03/14 13:45:00 US/Eastern')

两个 DateTime 不能相加

>>> from DateTime.interfaces import DateTimeError
>>> try:
...     dt + dt
...     print('fail')
... except DateTimeError:
...     print('ok')
ok

可以从 DateTime 中减去一个数字,或者从一个数字中减去一个 DateTime,但是不能从一个数字中减去一个 DateTime

>>> DateTime('1997/03/10 13:45 US/Eastern') - dt
1.0
>>> dt - 1
DateTime('1997/03/08 13:45:00 US/Eastern')
>>> 1 - dt
Traceback (most recent call last):
...
TypeError: unsupported operand type(s) for -: 'int' and 'DateTime'

DateTime 也可以转换为整数(自纪元以来的秒数)和浮点数

>>> int(dt)
857933100
>>> float(dt)
857933100.0

变更日志

5.5 (2024-03-21)

  • 将 pickle 格式改为将微秒作为 int 导出,以解决 2038 年之后的日期问题。(#56

5.4 (2023-12-15)

  • 修复在反序列化 DateTime.DateTime().asdatetime() 时出现的 UnknownTimeZoneError。(#58

  • 修复 DateTime 实例之间的相等比较。(#60

5.3 (2023-11-14)

  • 添加对 Python 3.12 的支持。

  • 添加对 Python 3.13a2 的初步支持。

5.2 (2023-07-19)

  • 在比较方法中将 int 转换为 float。

  • 修复 DateTime 实例和 None 之间的比较方法。(#52

5.1 (2023-03-14)

  • setup.py 添加缺失的 python_requires

5.0 (2023-01-12)

  • 停止支持 Python 2.7、3.5 和 3.6。

4.8 (2022-12-16)

  • 修复阻止在 Python 2.7 和 3.5 上进行测试的潜在 buildout 配置错误,并修复与 Python 3.5 不兼容的测试代码。(#44

  • 添加对 Python 3.11 的支持。

4.7 (2022-09-14)

  • 修复了超过 2038 年的 DateTime 相加的舍入问题。(#41

4.6 (2022-09-10)

  • 修复了 DateTime 对象的 __format__ 方法。(#39

4.5 (2022-07-04)

  • 添加 DateTime 对象的 __format__ 方法。(#35

4.4 (2022-02-11)

  • 修复了 WAT 定义 #31

  • 添加对 Python 3.8、3.9 和 3.10 的支持。

  • 停止支持 Python 3.4。

4.3 (2018-10-05)

  • 添加对 Python 3.7 的支持。

4.2 (2017-04-26)

  • 添加对 Python 3.6 的支持,停止支持 Python 3.3。

4.1.1 (2016-04-30)

  • 支持具有数字时区的反序列化实例,例如 +0430

4.1 (2016-04-03)

  • 添加对 Python 3.4 和 3.5 的支持。

  • 停止支持 Python 2.6 和 3.2。

4.0.1 (2013-10-15)

  • 提供更多向后兼容的时区。[vangheem]

4.0 (2013-02-23)

  • 除了 2.6 和 2.7 之外,还添加了对 Python 3.2 和 3.3 的支持。

  • 删除了未使用的旧版pytz测试和DateTimeZone模块,并重命名了一些测试内部名称。

3.0.3 (2013-01-22)

  • 允许在创建DateTime对象时,将时区参数作为一个Unicode字符串传入两个参数。

3.0.2 (2012-10-21)

  • LP #1045233:尊重日期格式设置,解析如 11-01-2001 的日期。

3.0.1 (2012-09-23)

  • 添加了DateTime 2.12.7中引入的 _dt_reconstructor 函数,以提供与可能引用此函数的pickle的向前兼容性。

3.0 (2011-12-09)

  • 无更改。

DateTime 3的向下兼容性

DateTime 3更改了pickle表示形式。使用DateTime旧版本pickle的DateTime实例可以读取,但旧版本的DateTime无法读取使用版本3 pickle的DateTime实例。

DateTime 3将DateTime更改为具有插槽的新式类,而不是旧式类。

DateTime 3在其API的大部分内容中尝试保留微秒分辨率,而旧版本通常只能达到毫秒分辨率。由于Python 2.7之前的Python版本中浮点值的表示方式,如果您想获得高精度,则不应比较DateTime实例的字符串或浮点表示。同样适用于由 timeTime() 等方法返回的计算值。通过调用其 micros() 方法可以获得DateTime值的最高精度。DateTime不太适合用于比较文件系统的时间戳 - 请使用Python标准库中的time和datetime对象。

3.0b3 (2011-10-19)

  • 允许将DateTime对象与None进行比较。

3.0b2 (2011-10-19)

  • 撤销了对反序列化时单个参数 None 的特殊情况处理,并继续将其视为 now 的意思。

3.0b1 (2011-05-07)

  • 恢复了 strftimeFormatter 作为类。

  • 添加了对只读类属性和接口的测试。

3.0a2 (2011-05-07)

  • 重新支持读取没有 _micros 值的旧DateTime pickle。

  • 避免将代表时间的 _t 作为自纪元以来的浮点秒存储,因为我们已经有 _micros 以长整型执行相同的功能。内存使用降低到每个DateTime实例约300字节。

  • 更新了异常引发语法到当前样式。

  • 避免为每个实例存储 _aday_fday_pday_amon_fmon_pmon_pmhour_pm,而是在 _dayoffset_month_hour 的基础上动态查找。这为每个DateTime实例节省了另外150字节的内存。

  • 将各种内部解析相关类变量移动到模块常量中。

  • 不再提供 DateErrorDateTimeErrorSyntaxErrorTimeError 异常作为类属性,而是从它们的标准 DateTime.interfaces 位置导入。

  • 删除了已弃用的 _isDST_localzone 类变量。

  • 将pytz缓存从 DateTime._tzinfo 移动到模块全局 _TZINFO

  • 将DateTime作为新式类,并通过插槽定义限制其可用属性。由于 ccopy_regn_reconstructor 段落,pickle大小增加到110字节。但每个实例的内存大小从3kb降低到500字节。

3.0a1 (2011-05-06)

  • 重新排列了 _calcIndependentSecondEtc 中的某些计算,以保留更多的浮点精度。

  • 通过仅存储一个包含 _micros 和时区信息的元组来优化pickle数据,从而将pickle大小从平均300字节减少到仅60字节。

  • 通过避免创建表示当前时间的中间DateTime值来优化反序列化。

  • 删除了没有 _micros 值的旧DateTime pickle的就地迁移。

  • 删除了已弃用的使用 DateTime.__cmp__ 的支持。

  • 在比较两个日期时间时考虑时区设置,以确定(非)相等性。

  • 修复了可能未使用过的 _parse_iso8601 函数。

  • 删除了已弃用的旧DateTimeZone、strftime和re的引用。删除尾随空格。

  • 从buildout中删除了对缺失版本部分的引用。

2.12.7 (2012-08-11)

  • 添加了对DateTime 3 pickle格式的向前兼容性。在版本3下构建的DateTime实例可以由本版本读取和反序列化。已序列化的数据将被转换为当前版本格式(旧式类/无槽)。转换后,将再次以旧格式存储。这应该允许DateTime 2和3之间的透明升级/降级路径。

2.12.6 (2010-10-17)

  • testDayOfWeek测试改为与操作系统区域设置无关。

2.12.5 (2010-07-29)

  • Launchpad #143269:纠正了使用三个数字参数构建DateTime对象时年份值行为的文档。

  • Launchpad #142521:删除了DateTime.__str__中的令人困惑的特殊情况,其中午夜(例如,“2010-07-27 00:00:00 US/Eastern”)的DateTime实例只会渲染其日期而不会渲染其他内容。

2.12.4 (2010-07-12)

  • 修复了EDT的映射(原来是 -> “GMT-0400”,现在是“GMT-4”)。

2.12.3 (2010-07-09)

  • 添加了EDT时区支持。解决了bug #599856。[vangheem]

2.12.2 (2010-05-05)

  • Launchpad #572715:在应用Marius Gedminus提供的补丁以修复API中断后,放宽了对pytz的pin。

2.12.1 (2010-04-30)

  • 为了使用标准库的doctest模块,移除了对zope.testing.doctest未声明的测试依赖。

  • 在pytz <= 2010b上添加了最大版本要求。较新版本会产生与时区更改相关的测试失败。

2.12.0 (2009-03-04)

  • Launchpad #290254:从Zope 2.11分支版本向前移植了“_micros”无pickle修复。

2.11.2 (2009-02-02)

  • 包含所有 pytz区域名称,而不仅仅是“常用”名称。

  • 修复了一个脆弱的doctest,并临时修复了另一个。

  • 修复了launchpad #267545:DateTime(DateTime())应该保留正确的小时。

2.11.1 (2008-08-05)

  • DateTime对象的datetime对象转换,如果非pytz tzinfo。Timezones()返回时区列表的副本(允许测试运行)。

  • 合并了slinkp-datetime-200007分支:修复了DateTime(anotherDateTime)构造函数以保留时区。

2.11.0b1 (2008-01-06)

  • 从Zope2主源代码树中分离出来。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

DateTime-5.5.tar.gz (63.7 kB 查看哈希值)

构建分发

DateTime-5.5-py3-none-any.whl (52.6 kB 查看哈希值)

上传于 Python 3

由以下支持