跳转至

timedelta 类对象

timedelta 对象表示两个 date 或者 time 的时间间隔。

timedelta

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

所有的参数都是可选的并且默认为 0。这些参数可以是整数或者浮点数,也可以是正数或者负数。

只有 days, seconds 和 microseconds 会存储在内部,即python内部以 days, seconds 和 microseconds 三个单位作为存储的基本单位。参数单位转换规则如下:

1毫秒会转换成1000微秒。

1分钟会转换成60秒。

1小时会转换成3600秒。

1星期会转换成7天。

days, seconds, microseconds 本身也是标准化的,以保证表达方式的唯一性,例:

0 <= microseconds < 1000000

0 <= seconds < 3600*24 (一天的秒数)

-999999999 <= days <= 999999999

在有任何浮点型参数或者微秒为小数的情况下,所有小数均会按照前面的换算规则叠加到下一级,并使用round-half-to-even的方法对微秒进行取舍。没有浮点型参数情况下,转换的过程就是精确的(没有信息丢失)。

如果标准化后的 days 数值超过了指定范围,将会抛出 OverflowError 异常。

需要注意的是,负数被标准化后的结果会让你大吃一惊。例如,

>>> from datetime import timedelta
>>> d = timedelta(microseconds=-1)
>>> (d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)

类属性

timedelta.min

The most negative timedelta object, timedelta(-999999999).

timedelta.max

The most positive timedelta object, timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999).

timedelta.resolution

两个不相等的 timedelta 类对象最小的间隔为 timedelta(microseconds=1)。

需要注意的是,因为标准化的缘故,timedelta.max > -timedelta.min,-timedelta.max 不可以表示一个 timedelta 类对象。

实例属性(只读)

days

-999999999 至 999999999 ,含999999999

seconds

0 至 86399,包含86399

microseconds

0 至 999999,包含999999

支持的运算:

t1 = t2 + t3

t2 和 t3 的总和。 t1-t2 == t3 和 t1-t3 == t2 的值永远为真。(1)

t1 = t2 - t3

t2 减 t3 的差。t1 == t2 - t3 和 t2 == t1 + t3 值为永远为的真. (1)(6)

t1 = t2 * i or t1 = i * t2

乘以一个整数。假如 i != 0 则 t1 // i == t2 的值为真。

In general, t1 * i == t1 * (i-1) + t1 is true. (1)

t1 = t2 * f or t1 = f * t2

乘以一个浮点数,小数结果使用 round-half-to-even 方式进行取舍。

f = t2 / t3

Division (3) of overall duration t2 by interval unit t3.返回一个 float 对象。

t1 = t2 / f or t1 = t2 / i

除以一个 浮点数或者整数。小数结果采用 round-half-to-even 方法进行取舍。

t1 = t2 // i or t1 = t2 // t3

取整除,余数部分(如果有的话)将被丢弃。在第二种情况下,返回一个整数。(3)

t1 = t2 % t3

余数为一个 timedelta 对象。(3)

q, r = divmod(t1, t2)

通过 : q = t1 // t2 (3) and r = t1 % t2 计算出商和余数。q是一个整数,r是一个 timedelta 对象。

+t1

返回一个相同数值的 timedelta 对象。

-t1

等价于 timedelta(-t1.days, -t1.seconds, -t1.microseconds), 和 t1* -1. (1)(4)

abs(t)

当 t.days >= 0时等于 +\ *t*, 当t.days < 0 时 -t 。 (2)

str(t)

返回一个形如 [D day[s], ][H]H:MM:SS[.UUUUUU] 的字符串,当 t 为负数的时候, D 也为负数。 (5)

repr(t)

返回一个 timedelta 对象的字符串表示形式,作为附带正规属性值的构造器调用。

注释:

精确但可能会溢出。 精确且不会溢出。

除以0将会抛出异常 ZeroDivisionError 。

-timedelta.max 不是一个 timedelta 类对象。

String representations of timedelta objects are normalized similarly to their internal representation. This leads to somewhat unusual results for negative timedeltas. For example:

>>> timedelta(hours=-5)
datetime.timedelta(days=-1, seconds=68400)

>>> print
-1 day, 19:00:00
表达式 t2 - t3 通常与 t2 + (-t3) 是等价的,除非 t3 等于 timedelta.max; 在这种情况下前者会返回结果,而后者则会溢出。

实例方法

timedelta.total_seconds()

返回时间间隔包含了多少秒。

from datetime import timedelta
print(timedelta(days=1).total_seconds())

date 对象

date(year, month, day)

所有参数都是必选的。参数可以是在下面范围内的整数:

MINYEAR <= year <= MAXYEAR

1 <= month <= 12

1 <= 日期 <= 给定年月对应的天数

类方法classmethod

date.today()

返回当地的当前日期。与date.fromtimestamp(time.time())等价。

date.fromordinal(ordinal)

返回对应于无神论公历序数的日期,其中第一年的1月1日有序数1。

类属性

date.min

最小的日期 date(MINYEAR, 1, 1) 。

date.max

最大的日期 ,date(MAXYEAR, 12, 31)。

date.resolution

两个日期对象的最小间隔,timedelta(days=1)。

实例属性(只读)

date.year

在 MINYEAR 和 MAXYEAR 之间,包含边界。

date.month

1 至 12(含)

date.day

返回1到指定年月的天数间的数字。

支持的运算

date2 = date1 + timedelta

date2 is timedelta.days days removed from date1. (1)

date2 = date1 - timedelta

Computes date2 such that date2 + timedelta == date1. (2)

timedelta = date1 - date2 (3)

date1 < date2

date1 is considered less than date2 when date1 precedes date2in time. (4)

实例方法

replace

date.replace(year=self.year, month=self.month, day=self.day)

替换年月日中的一个或多个,返回替换后的date对象

from datetime import date

dt = date(2019, 6, 18)
dt_new = dt.replace(year=2020)
print(dt_new)

timetuple

date.timetuple()

返回当前时间对象的元组

toordinal

date.toordinal()

返回日期的公历序数,其中第一年的1月1日有序数1。

对于任何日期对象d,date.fromordinal(d.toordinal())=d

weekday

date.weekday()

返回一个整数代表星期几,星期一为0,星期天为6。

例如, date(2002, 12, 4).weekday() == 2,表示的是星期三。

isoweekday

date.isoweekday()

返回一个整数代表星期几,星期一为1,星期天为7。

例如:date(2002, 12, 4).isoweekday() == 3,表示星期三。

isocalendar

date.isocalendar()

返回一个三元元组,(ISO year, ISO week number, ISO weekday) 。

isoformat

date.isoformat() 返回一个 ISO 8601 格式的字符串, 'YYYY-MM-DD'。例如 date(2002, 12, 4).isoformat() == '2002-12-04'。

str

date.str() 对于日期对象 d, str(d) 等价于 d.isoformat() 。

ctime

date.ctime()

返回一个表示日期的字符串,例如日期(2002,12,4).ctime()='Wed Dec 4 00:00:00 2002'。

strftime

date.strftime(format) 返回表示日期的字符串,由显式格式字符串控制。

格式化字符串查看: see strftime() and strptime() Behavior.

常用的:

    year:                %Y      

    month:               %m

    day:                 %d

    hour:                %H

    minute:              %M 

    second:              %S

    本地工作日缩写        %a

    本地工作日全名        %A

    当地月份缩写          %b

    当地月份全名          %B
示例代码
from datetime import date

dt = date(2018, 6, 18)
print(date.strftime(dt, '%Y-%m-%d %H:%M:%S %a %A %b %B'))

# 结果
2018-06-18 00:00:00 Mon Monday Jun June

datetime 对象
构造器 :

class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0) year, month, day 三个参数是必选的。 tzinfo 可以是 None, 或者是是一个 tzinfo 子类的实例。其余的参数可以是在以下范围内的整数:

MINYEAR <= year <= MAXYEAR,

1 <= month <= 12,

1 <= day <= 指定年月的天数,

0 <= hour < 24,

0 <= minute < 60,

0 <= second < 60,

0 <= microsecond < 1000000,

fold in [0, 1].

如果参数不在这些范围内,则抛出 ValueError 异常。

3.6 新版功能: 增加了 fold 参数。

类方法:

datetime.today()

    返回当前本地时间

datetime.now(tz=None)

    返回当前本地时间

datetime.utcnow()

    返回utc时间,和北京时间早8小时

datetime.fromtimestamp(timestamp, tz=None)

    返回与posix时间戳相对应的本地日期和时间

datetime.utcfromtimestamp(timestamp)

    返回与posix时间戳对应的UTC日期时间,TZINFO NONE。

    如果时间戳超出平台 gmtime()函数支持的值范围,这可能会引发溢出错误,并且gmtime()失败时会引发OSError。在1970年到2038年,这是很常见的。

datetime.fromordinal(ordinal)

    返回对应于无神论公历序数的日期时间,其中1年的1月1日具有序数1。

datetime.combine(date, time, tzinfo=self.tzinfo)

    组合日期和时间成datetime类型

    示例代码

from datetime import datetime, time, date

d = date(2018, 6, 18) t = time(5, 5, 5) dt = datetime.combine(d, t)

print(type(dt)) print(dt)

result

2018-06-18 05:05:05

类属性:

datetime.min The earliest representable datetime, datetime(MINYEAR, 1, 1, tzinfo=None).

datetime.max The latest representable datetime, datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None).

datetime.resolution The smallest possible difference between non-equal datetime objects, timedelta(microseconds=1).

实例属性(只读):

datetime.year 在 MINYEAR 和 MAXYEAR 之间,包含边界。

datetime.month 1 至 12(含)

datetime.day 返回1到指定年月的天数间的数字。

datetime.hour In range(24).

datetime.minute In range(60).

datetime.second In range(60).

datetime.microsecond In range(1000000).

datetime.tzinfo 作为tzinfo参数传递给datetime构造函数的对象,如果没有传递,则为none。

实例方法(部分):

datetime.date()

    返回date对象

datetime.time()

    返回time对象

datetime.timetz()

    返回具有相同小时、分钟、秒、微秒、折叠和tzinfo属性的时间对象。

datetime.replace()(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0) 返回具有相同属性的datetime,除了那些由指定的关键字参数赋予新值的属性。请注意,可以指定TZINFO=NONE,以从不转换日期和时间数据的已知日期时间创建原始日期时间。