datetime模块为python标准库的一个模块,该模块提供了对时间和日期进行操作的功能。datatime模块通过date类、time类、datetime类、timedelta类、timezone类等来获取或者操作时间、日期。
在python中,有三个标准模块可以对时间和日期进行操作,分别是time模块、datetime模块、calendar模块。其中time模块是通过调用C库实现的,所以有些方法在某些平台上可能无法调用,但是其提供的大部分接口与C标准库time.h基本一致。与time模块相比,datetime模块提供的接口更直观、易用,功能也更加强大。
相关术语timestamp(时间戳) 也称为Unix时间 或 POSIX时间;它是一种时间表示方式,表示从格林尼治时间1970年1月1日0时0分0秒开始到现在所经过的毫秒数,其值为float类型。 但是有些编程语言的相关方法返回的是秒数(Python就是这样),这个需要看方法的文档说明。需要说明的是时间戳是个差值,其值与时区无关。
epoch time 表示时间开始的起点;它是一个特定的时间,不同平台上这个时间点的值不太相同,对于Unix而言,epoch time为 1970-01-01 00:00:00 UTC。
UTC time Coordinated Universal Time,世界协调时,又称 格林尼治天文时间、世界标准时间。与UTC time对应的是各个时区的local time,东N区的时间比UTC时间早N个小时,因此UTC time + N小时 即为东N区的本地时间;而西N区时间比UTC时间晚N个小时,即 UTC time - N小时 即为西N区的本地时间; 中国在东8区,因此比UTC时间早8小时,可以以UTC+8进行表示。
模块方法 1、date类 date类属性、方法:| 类方法/属性 | 描述 |
|---|---|
| date.today() | 返回一个表示当前本地日期的date对象 |
| date.fromtimestamp() | 根据跟定的时间戳,返回一个date对象 |
| date.max | date对象所能表示的最大日期:9999-12-31 |
| date.min | date对象所能表示的最小日志:00001-01-01 |
| date.resoluation | date对象表示的日期的最小单位:天 |
d = datetime.date.today()
| 对象方法/属性 | 描述 |
|---|---|
| d.year | 年 |
| d.month | 月 |
| d.day | 日 |
| d.replace(year[, month[, day]]) | 生成并返回一个新的日期对象,原日期对象不变 |
| d.timetuple() | 返回日期对应的time.struct_time对象 |
| d.toordinal() | 返回日期是是自 0001-01-01 开始的第多少天 |
| d.weekday() | 返回日期是星期几,[0, 6],0表示星期一 |
| d.isoweekday() | 返回日期是星期几,[1, 7], 1表示星期一 |
| d.isocalendar() | 返回一个元组,格式为:(year, weekday, isoweekday) |
| d.isoformat() | 返回‘YYYY-MM-DD’格式的日期字符串 |
| d.strftime(format) | 返回指定格式的日期字符串,与time模块的strftime(format, struct_time)功能相同 |
| 类方法/属性 | 描述 |
|---|---|
| time.max | time类所能表示的最大时间:time(23, 59, 59, 999999) |
| time.min | time类所能表示的最小时间:time(0, 0, 0, 0) |
| time.resolution | 时间的最小单位,即两个不同时间的最小差值:1微秒 |
t = datetime.time.(hour, [minute[, second, [microsecond[, tzinfo]]]])
| 对象方法/属性 | 描述 |
|---|---|
| t.hour | 时 |
| t.minute | 分 |
| t.second | 秒 |
| t.microsecond | 微秒 |
| t.tzinfo | 返回传递给time构造方法的tzinfo对象,如果该参数未给出,则返回None |
| t.replace(hour[, minute[, second[, microsecond[, tzinfo]]]]) | 生成并返回一个新的时间对象,原时间对象不变 |
| t.isoformat() | 返回一个‘HH:MM:SS.%f’格式的时间字符串 |
| t.strftime() | 返回指定格式的时间字符串,与time模块的strftime(format, struct_time)功能相同 |
| 类方法/属性 | 描述 |
|---|---|
| datetime.today() | 返回一个表示当前本期日期时间的datetime对象 |
| datetime.now([tz]) | 返回指定时区日期时间的datetime对象,如果不指定tz参数则结果同上 |
| datetime.utcnow() | 返回当前utc日期时间的datetime对象 |
| datetime.fromtimestamp(timestamp[, tz]) | 根据指定的时间戳创建一个datetime对象 |
| datetime.utcfromtimestamp(timestamp) | 根据指定的时间戳创建一个datetime对象 |
| datetime.combine(date, time) | 把指定的date和time对象整合成一个datetime对象 |
| datetime.strptime(date_str, format) | 将时间字符串转换为datetime对象 |
dt = datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
| 对象方法/属性 | 描述 |
|---|---|
| dt.year, dt.month, dt.day | 年、月、日 |
| dt.hour, dt.minute, dt.second | 时、分、秒 |
| dt.microsecond, dt.tzinfo | 微秒、时区信息 |
| dt.date() | 获取datetime对象对应的date对象 |
| dt.time() | 获取datetime对象对应的time对象, tzinfo 为None |
| dt.timetz() | 获取datetime对象对应的time对象,tzinfo与datetime对象的tzinfo相同 |
| dt.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]) | 生成并返回一个新的datetime对象,如果所有参数都没有指定,则返回一个与原datetime对象相同的对象 |
| dt.timetuple() | 返回datetime对象对应的tuple(不包括tzinfo) |
| dt.utctimetuple() | 返回datetime对象对应的utc时间的tuple(不包括tzinfo) |
| dt.timestamp() | 返回datetime对象对应的时间戳,返回值是一个类似time.time()返回的浮点型值。需要注释的是,该方法是Python 3.3才新增的 |
| dt.toordinal() | 同date对象 |
| dt.weekday() | 同date对象 |
| dt.isocalendar() | 同date对象 |
| dt.isoformat([sep]) | 返回一个‘%Y-%m-%d |
| dt.ctime() | 等价于time模块的time.ctime(time.mktime(d.timetuple())) |
| dt.strftime(format) | 返回指定格式的时间字符串 |
timedelta对象表示连个不同时间之间的差值。如果使用time模块对时间进行算术运行,只能将字符串格式的时间 和 struct_time格式的时间对象 先转换为时间戳格式,然后对该时间戳加上或减去n秒,最后再转换回struct_time格式或字符串格式,这显然很不方便。而datetime模块提供的timedelta类可以让我们很方面的对datetime.date, datetime.time和datetime.datetime对象做算术运算,且两个时间之间的差值单位也更加容易控制。
timedelta类方法/属性| 类方法/属性 | 描述 |
|---|---|
| timedelta.min | timedelta(-999999999) |
| timedelta.max | timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999) |
| timedelta.resolution | timedelta(microseconds=1) |
td = datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)
| 对象方法/属性 | 描述 |
|---|---|
| td.days | 天 [-999999999, 999999999] |
| td.seconds | 秒 [0, 86399] |
| td.microseconds | 微秒 [0, 999999] |
| td.total_seconds() | 时间差中包含的总秒数,等价于: td / timedelta(seconds=1) |
>>> import datetime >>> >>> datetime.timedelta(365).total_seconds() # 一年包含的总秒数 31536000.0 >>> dt = datetime.datetime.now() >>> dt + datetime.timedelta(3) # 3天后 datetime.datetime(2017, 2, 8, 9, 39, 40, 102821) >>> dt + datetime.timedelta(-3) # 3天前 datetime.datetime(2017, 2, 2, 9, 39, 40, 102821) >>> dt + datetime.timedelta(hours=3) # 3小时后 datetime.datetime(2017, 2, 5, 12, 39, 40, 102821) >>> dt + datetime.timedelta(hours=-3) # 3小时前 datetime.datetime(2017, 2, 5, 6, 39, 40, 102821) >>> dt + datetime.timedelta(hours=3, seconds=30) # 3小时30秒后 datetime.datetime(2017, 2, 5, 12, 40, 10, 102821)模块使用
使用import datetime导入相关模块。



