Python中time、datetime、random库
一、time库
1. 时间戳
时间戳是一个用来表示时间差的数字,他的目的是用时间差来表示时间,这个时间值表示的是,从1970-1-1 00:00:00 (格林威治时间)到你所给的时间之间相差了多少秒
时间戳保存时间的优点:
- 节约内存,因为时间戳返回的是一个数字,所以占的内存比用一个字符串类型来保存时间用的内存少。
- 方便加密,而且加密之后别人也不知道是否加密。
2. 睡眠 - sleep(秒)
让程序在此处暂停多少秒,再往下执行程序
3. 获取当前时间 - time()
import time
t1 = time.time() # 获取当前时间,得到的是一个时间戳
4.获取本地当前时间(结构体时间)
# localtime() - 获取当前时间,得到的是一个结构体时间
# localtime(时间戳) - 获取该时间戳对应的结构体时间
t2 = time.localtime()
print(t2)
# time.struct_time(tm_year=2022, tm_mon=8, tm_mday=26, tm_hour=10, tm_min=51, tm_sec=27, tm_wday=4, tm_yday=238, tm_isdst=0)
在上面得到的结构体时间中tm_wday=4
表示的是星期几,因为其取值范围是[0,6],所以这是星期五,tm_yday=228
表示的是今天是今年的第228天。
5.将结构体时间转换为时间戳 - mktime()
print(time.mktime(t2)) # 1661482287.0
6.时间字符串和结构体时间之间的转换
-
结构体时间 -> 字符串时间
strftime()
print(time.strftime("%Y-%m-%d %H:%M:%S", t2)) # 2022-08-26 10:51:27
转换为
星期 xx:xx
print(time.strftime('%a %H:%M',t2)) #Fri 10:51
-
字符串时间 -> 结构体时间
strptime()
result = time.strptime("2021/3/4", "%Y/%m/%d") print(result) # time.struct_time(tm_year=2021, tm_mon=3, tm_mday=4, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=63, tm_isdst=-1)
注意前后的格式要相同,不然会出现不搭配的情况,会报错,例如写成如下情况就会报错
print(time.strptime('2021-3-4','%Y/%m/%d'))
因为左边的格式是-
,右边的是/
,格式不一样就会报错
二、datetime库
1.datetime类
-
获取当前时间
t1 = datetime.datetime.today() # datetime.datetime(2022, 8, 26, 10, 19, 41, 607986) print(t1) # 2022-08-26 10:19:41.607986 t2 = datetime.datetime.now() # datetime.datetime(2022, 8, 26, 10, 19, 41, 607986)
-
根据时间值创建时间对象
t3 = datetime.datetime(2020, 8, 26) print(t3) # 2020-08-26 00:00:00
-
根据时间字符串创建时间对象
print(datetime.datetime.strptime('2021/3/21', '%Y/%m/%d')) # 2021-03-21 00:00:00
-
单独获取具体的时间信息
print(t3.year, t3.month, t3.day, t3.hour, t3.weekday()) # 2020 8 26 0 2
-
时间对象 -> 字符串时间
print(t2.strftime('%Y-%m-%d %H:%M:%S')) # 2022-08-26 10:19:41
-
求时间差:
时间对象1 - 时间对象2
tt = datetime.datetime(2022, 5, 3, 9, 10) ot = datetime.datetime(2022, 10, 1, 10, 5) res = ot - tt # 151 days, 0:55:00 print(res, type(res)) # 151 days, 0:55:00 <class 'datetime.timedelta'>
-
时间对象转换为结构体时间
print(tt.timetuple())
-
时间对象转时间戳
print(tt.timestamp()) # 1651540200.0
2.timedelta
-
给一个时间,计算几天后对应的天,几小时后对应的时间
nt = datetime.datetime(2022, 10, 1, 10, 8, 59) # 32天后对应的天 print(nt + datetime.timedelta(days=32)) # 2022-11-02 10:08:59 # 5天6小时后 print(nt + datetime.timedelta(days=5,hours=6)) # 2022-10-06 16:08:59
三、random库
-
random()
,产生[0,1)的随机小数import random x = random.random() # x为一个[0,1)之间的小数 # 如何产生[0,20)之间的随机小数 y = random.random()*20 # 这样就能产生一个[0,20)之间的小数了 # 如何产生一个[5,30)之间的小数 # 0*25~1*25 -> 0+5~25+5 —> 5~30 z = random.random()*25+5
-
randrange(start,end,step)
,从一个range()对象中随机获取一个值n = random.randrange(1, 10, 2) # 用法和range()相识
-
sample()
,从一个可迭代对象中不放回的抽取几个数放到一个列表中,返回值为一个列表print(random.sample([10, 34, 78, 90], 3)) # [34, 90, 78] print(random.sample(range(10), 3)) # [5, 7, 4]
-
choice()
,从一个可迭代对象中随机抽取一个数并返回print(random.choice(range(10))) # 2
-
choices(序列,权重,求和权重,数量)
,是一个有放回的抽样,从一个可迭代对象中抽取几个值,返回值是一个列表print(random.choices([10, 34, 78, 90], k=3)) # [34,87,34] # 设置权重,控制某个值抽到的概率 result = random.choices([10, 34, 78, 90], [1, 0.9, 0.5, 0.3], k=2) print(result) # 经过多次打印可以看到,90出现的概率特别低。这就是权重的效果
-
shuffle()
,洗牌,打乱列表中原数据的顺序,是之间改变列表的操作,类似与列表的sort()
方法nums = [10, 50, 66, 34, 53] random.shuffle(nums) print(nums) # [10, 34, 53, 66, 50]