time模块

以下都直接说方法名.
时间模块要记住下边的图:
三种时间数据类型互相转换
时间字符串生成

time模块内其实有三种时间:

1 时间戳(偏移量)
time()方法不能传参数,调用该方法返回一个时间戳,就是一个浮点数,表示从1970年1月1日0时到函数运行时间的秒数.1970年是UNIX系统诞生.这是一个绝对时间,与时区,夏令时等都无关系,一般用来做运算,比如程序运行的时间等.

import time
start = time.time()
...
end = time.time()
elapsed_time = end - start

时间戳转换成结构化时间,用localtime和gmtime方法.

2 结构化时间
localtime(int)得到一个namedtuple对象(本质是一个元组),可以调用里边的属性名得到时间的某个内容比如年,月,日等.其中tm_wday表示周一到周六,索引从0开始.tm_yday表示是一年的第几天.如果不传参数,就是用当前时间戳生成结构化时间,如果传参数表示从时间戳0开始偏移的秒数.注意本地时间一般是根据时区调整过的.

import time
b = time.localtime()
print(b.tm_wday,b.tm_yday)

gmtime(int),如果不传参数,得到utc +0 时间对应的结构化时间.如果传参数,则表示从时间戳0开始偏移的秒数.这个时间就和时间戳本质是一样的,不包含时区的概念.

结构化时间转换为时间戳,用mktime(struct_time)方法
结构化时间转换为字符串时间,用strftime(“%Y-%m-%d %X”,struct_time)方法

import time

time_stamp = 1459003290
b = time.localtime(time_stamp)
c = time.gmtime(time_stamp)
print("local time is: ", b)
print("GMT time is: ", c)
print('----------------------------------')
d = time.strftime("%Y~%m~%d %X", b)
e = time.strftime("%Y %m %d %X", c)
print("stamp from localtime is: ", d)
print("stamp from GMT time is: ", e)
print('----------------------------------')

3 字符串时间
ctime(secs)获得一个简单的字符串描述,后边可以不传参数按照当前时间,也可以传入秒数.
asctime(p_tuple)也是获得字符串描述,后边可以不传参数,默认是time.localtime(),也可以传入参数,但参数必须是一个结构化时间对象.
这两种方法都不支持自定义格式显示,如果要自定义,则需要通过strftime(format,struct_time)从结构化时间生成一个字符串时间.这个返回对象的类型确实是一个字符串.

从字符串时间转换为结构化时间,用strptime(format,string_time)方法,通配符与strf一样,这两个函数其实是做相反的工作.

import time

a = time.localtime(1527172423)
print("ctime is: ", a)
b = time.strftime("%d-%m-%Y %X", a)
print("from struct get string is: ", b)
c = time.strptime(b, "%d-%m-%Y %H:%M:%S")
print('from string to struct_time is: ', c)

字符串时间和时间戳是不能互相转换的(为什么?因为纯粹的字符串不知道时区和其他辅助信息,无法转换成时间戳).但是生成的或者是由时间戳转换而成的结构化时间,是包含这些内容的,因此可以转换成时间戳.示例代码中同一个时间戳,用localtime和gmtime转换成结构化时间再转换回来,结果是不同的,所以一般情况最好使用localtime来获取时间.

datetime模块

相比time模块,datetime模块更接近普通人的使用方式,而time模块比较偏内部运算使用.
一般只要知道 datetime.datetime.now() datetime.datetime.today()就可以了.

random模块

random模块是python中的随机数方法,采用梅森旋转算法生成伪随机数(为什么计算机无法生成真正的随机数?).知道了随机数的发生原理之后,就理解了rand设置种子的方法.默认情况下种子是当前的系统时间.
随机数在编程中使用很广,包括测试程序,验证码程序,统计学计算等.
random模块的主要方法:

random() 产生一个在0-1之间的随机数
randint(a,b) 产生a-b之间的随机整数,包含a和b
randrange(a,b) 产生a-b之间的随机整数,包含a,不包含b
choice(iterable) 随机选取1个可迭代对象里的元素
sample(iterable,num) 随机选取num个元素,num必须给出,不得超过元素个数.返回这些元素构成的列表
unform(a,b) 取a-b之间的浮点型随机值
shuffle(item) 打乱后边序列里的顺序,就地打乱,返回None
seed(num) 改变随机数种子