一、time模块
该模块提供了各种函数来操作时间值。
时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数。
1. time的函数
函数 | 说明 |
---|---|
asctime([tuple]) | 将时间元组转换为字符串 |
ctime(seconds) | 将自Epoch以来以秒为单位的时间转换为以本地时间为单位的字符串 |
get_clock_info(name: str) | 获取指定时钟的信息 |
gmtime([seconds]) | 将 Epoch 以来的秒数转换为表示 UTC(又名 GMT)的时间元组 |
localtime([seconds]) | 将 Epoch 以来的秒数转换为表示本地时间的时间元组 |
mktime(tuple) | 将本地时间的时间元组转换为自纪元以来的秒数 |
monotonic() | 单调时钟,不能倒退 |
monotonic_ns() | 单调时钟,不能倒退,以纳秒为单位 |
perf_counter() | 用于基准测试的性能计数器 |
perf_counter_ns() | 性能计数器,以纳秒为单位进行基准测试 |
process_time() | 分析的进程时间:内核和用户空间 CPU 时间的总和 |
process_time() | 分析的进程时间为纳秒:内核和用户空间 CPU 时间的总和 |
sleep(seconds) | 延迟执行给定的秒数 |
strftime(format[, tuple]) | 根据格式规范将时间元组转换为字符串 |
strptime(string, format) | 根据格式规范将字符串解析为时间元组 |
thread_time() | 用于分析的线程时间:内核和用户空间 CPU 时间的总和 |
thread_time() | 以纳秒为单位进行分析的线程时间:内核和用户空间 CPU 时间的总和 |
time() | 返回自 Epoch 以来的当前时间(以秒为单位) |
time_ns() | 返回自 Epoch 以来的当前时间(以纳秒为单位) |
strptime()的常用格式代码:
格式 | 说明 |
---|---|
%Y | 年份,世纪为十进制数 |
%m | 以十进制数表示的月份 [01,12] |
%d | 以十进制数表示的日期 [01,31] |
%H | 小时(24 小时制),十进制数 [00,23] |
%M | 分钟为十进制数 [00,59] |
%S | 秒为十进制数 [00,61] |
%z | 与 UTC 的时区偏移 |
%a | 区域设置的缩写工作日名称 |
%A | 区域设置的完整工作日名称 |
%b | 区域设置的缩写月份名称 |
%B | 语言环境的完整月份名称 |
%c | 区域设置的适当日期和时间表示 |
%I | 小时(12 小时制),十进制数 [01,12] |
%p | 区域设置相当于 AM 或 PM。 |
2. 代码举例
import time
print(time.ctime(123))
# Thu Jan 1 08:02:03 1970
print(time.time())
# 1661511692.3475158
t3 = time.localtime()
print("t3:", t3)
# t3: time.struct_time(tm_year=2022, tm_mon=8, tm_mday=26, tm_hour=18, tm_min=47, tm_sec=27, tm_wday=4, tm_yday=238, tm_isdst=0)
t4 = time.localtime(1661476302.733082)
print(t4)
print(f'{t4.tm_year}年{t4.tm_mon}月{t4.tm_mday}日') # 2022年8月26日
print(time.mktime(t3)) # 1661511302.0
# 'xxxx年xx月xx日'
print(time.strftime('%Y年%m月%d日', t3)) # 2022年08月26日
# 星期 xx:xx
result = time.strftime('%a %H:%M', t4)
print(result) # Fri 09:11
# 上午 xx:xx 、下午 xx:xx
result = time.strftime('%p %H:%M', t4)
print(result) # AM 09:11
# '2021/8/10'
result = time.strptime('2021/8/10', '%Y/%m/%d')
print(result)
result = time.strptime('2022-5-10 19:30', '%Y-%m-%d %H:%M')
print(result)
# time.struct_time(tm_year=2022, tm_mon=5, tm_mday=10, tm_hour=19, tm_min=30, tm_sec=0, tm_wday=1, tm_yday=130, tm_isdst=-1)
二、datetime模块
它是一个具体的日期/时间和相关类型的模块。
from datetime import datetime, timedelta
from time import localtime
# 1. datetime类
# 1)获取当前时间
t1 = datetime.today()
print(t1, type(t1)) # 2022-08-26 19:07:25.224591 <class 'datetime.datetime'>
t2 = datetime.now()
print(t2) # 2022-08-26 19:07:25.224590
# 2)根据时间值创建时间对象
t3 = datetime(2020, 12, 5)
print(t3) # 2020-12-05 00:00:00
t4 = datetime(2022, 3, 4, 12, 50, 30)
print(t4) # 2022-03-04 12:50:30
# 3)根据时间字符串创建时间对象
t5 = datetime.strptime('2021/3/5', '%Y/%m/%d')
print(t5) # 2021-03-05 00:00:00
# 4)单独获取具体的时间信息
print(t5.year) # 2021
print(t5.month) # 3
print(t5.day) # 5
print(t5.hour) # 0
print(t5.minute) # 0
print(t5.second) # 0
print(t5.weekday()) # 4
# 星期值的取值范围:0~6,0表示星期1
# 5)将时间对象转换成字符串时间
# xxxx年xx月xx日
result = t4.strftime('%Y年%m月%d日')
print(result) # 2022年03月04日
# 6)求时间差: 时间对象1 - 时间对象2 - 返回时间间隔对象(通过时间间隔对象可以单独获取间隔时间的完整天数和秒数)
t1 = datetime(2022, 5, 3, 9, 10)
t2 = datetime(2022, 10, 1, 10, 5)
result = t2 - t1
print(result, type(result)) # 151 days, 0:55:00
print(result.days) # 151
print(result.seconds) # 3300
# 7)时间对象转换成结构体
result = t1.timetuple()
print(result) # time.struct_time(tm_year=2022, tm_mon=5, tm_mday=3, tm_hour=9, tm_min=10, tm_sec=0, tm_wday=1, tm_yday=123, tm_isdst=-1)
# 8)时间对象转时间戳
result = t1.timestamp()
print(result)
print(localtime(result))
# 2.timedelta - 时间间隔类
t1 = datetime(2022, 10, 1, 10, 8, 30)
print(t1) # 2022-10-01 10:08:30
# 10天以后对应的时间
result = t1 + timedelta(days=10)
print(result) # 2022-10-11 10:08:30
# 32天前对应的时间
result = t1 - timedelta(days=30)
print(result) # 2022-09-01 10:08:30
# 30分钟以后
result = t1 + timedelta(minutes=30)
print(result) # 2022-10-01 10:38:30
# 5天6小之前
result = t1 - timedelta(days=5, hours=6)
print(result) # 2022-09-26 04:08:30
# 3周以后
result = t1 + timedelta(weeks=3)
print(result) # 2022-10-22 10:08:30
三、random模块
random模块是随机变量生成器。
1. random的函数
函数 | 说明 |
---|---|
betavariate | β分布 |
choice | 随机获取一个元素 : choice(序列) |
choices | 有放回抽样 : choices(序列,权重,求和权重,数量) |
expovariate | 指数分布 |
gammavariate | 伽马分布 |
gauss | 高斯分布 |
getrandbits | 生成具有 k 个随机位的 int |
getstate | 返回内部状态;可以稍后传递给 setstate() |
lognormvariate | 对数正态分布 |
normalvariate | 正态分布 |
paretovariate | 帕累托分布, α是形状参数 |
randbytes | 生成 n 个随机字节 |
randint | 返回 [a, b] 范围内的随机整数,包括两个端点 |
random | 产生0到1的随机小数 |
randrange | 随机获取指定等差数列中的一个数字:randrange(起始值,终止值,步长), #权重列表中的数字代表对应选项的份数 |
sample | 随机获取指定序列中指定个数个元素,产生一个新的列表(无放回抽样) : sample(序列, 个数) |
seed | 从种子初始化内部状态 |
setstate | 从 getstate() 返回的对象恢复内部状态 |
shuffle | 洗牌, 并返回 None |
triangular | 三角分布 |
uniform | 根据四舍五入获取 [a, b) 或 [a, b] 范围内的随机数 |
vonmisesvariate | 循环数据分布 |
weibullvariate | 威布尔分布 |
2. 代码举例
from random import randint, random, randrange, sample, choice, choices, shuffle
print(random())
# 产生0~20之间的随机小数
print(random() * 20)
# 产生5~30之间的随机小数
print(random() * 25 + 5)
# 控制小数的小数位数(四舍五入):round(小数, 需要保留的小数位数)
print(round(3.1415926, 2)) # 3.14
print(range(1, 10, 2)) # 1, 3, 5, 7, 9
print(randrange(1, 10, 2))
result = sample([10, 34, 78, 90], 3)
print(result)
result = sample('abcd', 1)
print(result)
result = choice([10, 34, 78, 90])
print(result)
result = choices([10, 34, 78, 90], k=3)
print(result)
result = choices(['1000万', '10000', '100', '0'], [1, 2, 100, 200], k=2)
print(result)
nums = [10, 34, 78, 90]
shuffle(nums)
print(nums)