Bootstrap

python time模块日期运算,python 时间模块time,datetime详细介绍

模块(module)是 Python 中非常重要的东西,你可以把它理解为 Python 的扩展工具。换言之,Python 默认情况下提供了一些可用的东西,但是这些默认情况下提供的还远远不能满足编程实践的需要,于是就有人专门制作了另外一些工具。这些工具被称之为“模块”

任何一个 Pythoner 都可以编写模块,并且把这些模块放到网上供他人来使用。

当安装好 Python 之后,就有一些模块默认安装了,这个称之为“标准库”,“标准库”中的模块不需要安装,就可以直接使用。

如果没有纳入标准库的模块,需要安装之后才能使用。模块的安装方法,我特别推荐使用 pip 来安装。

在平常的代码中,我们常常需要与时间打交道。在Python中,与时间处理有关的模块就包括:time,datetime,calendar(很少用,不讲),下面分别来介绍。

在开始之前,首先要说明几点:

一、在Python中,通常有这几种方式来表示时间:

时间戳

格式化的时间字符串

元组(struct_time)共九个元素。(由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。)

二、几个定义

UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。

时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:

索引(Index) 属性(Attribute) 值(Values)

0 tm_year(年) 比如2011

1 tm_mon(月) 1 - 12

2 tm_mday(日) 1 - 31

3 tm_hour(时) 0 - 23

4 tm_min(分) 0 - 59

5 tm_sec(秒) 0 - 61

6 tm_wday(weekday) 0 - 6(0表示周日)

7 tm_yday(一年中的第几天) 1 - 366

8 tm_isdst(是否是夏令时) 默认为-1

三,time模块的方法

3.1 常用函数

time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。

time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

time.time():返回当前时间的时间戳。

time.mktime(t):将一个struct_time转化为时间戳。

time.sleep(secs):线程推迟指定的时间运行。单位为秒。

time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。

time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

举例用法:

import time

# time模块的方法

# time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。

print(time.localtime())

# time.struct_time(tm_year=2018, tm_mon=3, tm_mday=13, tm_hour=13, tm_min=44, tm_sec=0, tm_wday=1, tm_yday=72, tm_isdst=0)

# time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

print(time.gmtime())

# time.struct_time(tm_year=2018, tm_mon=3, tm_mday=13, tm_hour=5, tm_min=49, tm_sec=16, tm_wday=1, tm_yday=72, tm_isdst=0)

# time.time():返回当前时间的时间戳。

print(time.time())

# 1520920188.7989295

# time.mktime(t):将一个struct_time转化为时间戳。

a = time.localtime()

print(time.mktime(a))

# time.sleep(secs):线程推迟指定的时间运行。单位为秒。

time.sleep(0.1)

print("hello world")

# time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:

# 'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。

a = time.localtime()

print(time.asctime(a))

# time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。

# 如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

print(time.ctime())

# time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)

# 转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

print(time.strftime("%Y-%m-%d %X", time.localtime()) )

#输出2018-03-13 14:22:13

# time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

print(time.strftime("2018-03-13 14:26:23"))

# 2018-03-13 14:26:23

3.2  time模块常用的格式化字符串

格式

说明

%a

显示简化星期名称

%A

显示完整星期名称

%b

显示简化月份名称

%B

显示完整月份名称

%c

本地相应的日期和时间表示

%d

显示当月第几天

%H

按24小时制显示小时

%I

按12小时制显示小时

%j

显示当年第几天

%m

显示月份

%M

显示分钟数)

%p

本地am或者pm的相应符

%S

显示秒数)

%U

一年中的星期数

%w

显示在星期中的第几天,默认从0开始表示周一

%W

和%U基本相同

%x

本地相应日期

%X

本地相应时间

%y

去掉世纪的年份(00 - 99)

%Y

完整的年份

%Z

时区的名字(如果不存在为空字符)

%%

‘%’字符

3.3  时间函数之间的转化关系

afbfa6e2bc774e7049ccc88fdb46d2a1.png

d6fb820af53a119b20a38e555c06ed59.png

四,datetime模块的方法

相对于time 模块,datetime模块的接口则更直观,更容易调用

4.1datetiem模块定义了下面这几个类:

datetime.date:表示日期的类。常用的属性有year, month, day;

datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;

datetime.datetime:表示日期时间。

datetime.timedelta:表示时间间隔,即两个时间点之间的长度。

datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册)

我们需要记下下面几个方法就ok

-————1,d=datetime.datetime.now() 返回当前的datetime日期类型

d.timestamp(),d.today(), d.year,d.timetuple()等方法可以调

import datetime

d = datetime.datetime.now()

print(d)

d1 = d.time()

print(d1)

d2 =d.today()

print(d2)

d3 = d.year

print(d3)

d4 = d.timestamp()

print(d4)

d5 = d.timetuple()

print(d5)

# 2018-03-13 14:46:13.649710

# 14:46:13.649710

# 2018-03-13 14:46:13.649710

# 2018

# 1520923573.64971

# time.struct_time(tm_year=2018, tm_mon=3, tm_mday=13, tm_hour=14, tm_min=46, tm_sec=13, tm_wday=1, tm_yday=72, tm_isdst=-1)

————2.datetime.date.fromtimestamp(322222) 把一个时间戳转为datetime日期类型

import datetime

import time

d = datetime.date.fromtimestamp(0)

print(d)

# 1970-01-01

d =time.time()

d1 = datetime.date.fromtimestamp(d)

print(d1)

# 2018-03-13

————3.时间运算(datetime.timedelta)

# 3时间运算

import datetime

d = datetime.datetime.now()

print(d)

# 2018-03-13 14:51:02.755716

d1 = datetime.datetime(2017, 10, 1, 12, 53, 11, 821218)

print(d1)

# 2017-10-01 12:53:11.821218

d2 = datetime.datetime.now() + datetime.timedelta(4) #当前时间 +4天

print(d2)

# 2018-03-17 14:51:53.457663

d3 = datetime.datetime(2018, 3, 12, 14, 52, 35, 276589)

print(d3)

# 2018-03-12 14:52:35.276589

d4 = datetime.datetime.now() + datetime.timedelta(hours=4) #当前时间+4小时

print(d4)

# 2018-03-13 18:53:08.109074

————4,时间替换

# 4时间替换

import datetime

d = datetime.datetime.now()

print(d)

d1 = d.replace(year=2999,month=11,day=30)

print(d1)

d2 = datetime.date(2999, 11, 30)

print(d2)

# 2018-03-13 14:56:16.880071

# 2999-11-30 14:56:16.880071

# 2999-11-30

4.2 date类

date类表示一个日期。日期由年、月、日组成(地球人都知道~~)。date类的构造函数如下:

date.min: 返回 date(MINYEAR, 1, 1).

date.max: 返回 date(MAXYEAR, 12, 31).

date.year: 返回 年, MINYEAR和MAXYEAR之间

date.month: 返回 月, 1到12月之间

date.day: 返回 1到 n 之间.

year的范围是[MINYEAR, MAXYEAR],即[1, 9999];

month的范围是[1, 12]。(月份是从1开始的,不是从0开始的_);

day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天;

date类定义了一些常用的类方法与类属性,方便操作:

date.max、date.min:date对象所能表示的最大、最小日期;

date.resolution:date对象表示日期的最小单位。这里是天。

date.today():返回一个表示当前本地日期的date对象;

date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;

4.3  实例方法

date.replace(year, month, day):返回一个相同值的data对象, 除了这些参数给关键字指定新的值.

date.timetuple(): 返回一个time.struct_time对象.

date.toordinal(): 返回一个Gregoian Calendar对象.

date.weekday(): 返回day of the week. 星期一为0,星期日为6.

date.isoweekday(): 返回day of the week. 星期一为1,星期日为7.

date.isocalendar(): 返回一个三元组, (ISO year, ISO week number, ISO weekday).

date.isoformat(): 返回 一个'YYYY-MM-DD'的字符串格式.

date.ctime(): 返回一个字符串日期, d.ctime() 等同于 time.ctime(time.mktime(d.timetuple())).

date.strftime(format): 返回一个字符串日期, 格式自定义.

;