# 1. python和时间相关的模块有两个: time datetime
# 2. 时间戳
## 时间戳指的是当前时间到1970年1月1日0时0分0秒 (指的是格林威治时间)的时间差(单位是秒)
1) 使用时间戳保存时间比使用字符串保存时间所占用的内容要少很多;
2) 通过时间戳对时间进行加密 更简单
数值: 2的8次方 - 1个字节,
数值: 2的16次方 - 2个字节 32次方 - 4个字节
'2020-12-26 9:29:30' (保存的时候至少需要18个字节)
当前时间 - 1970年1月1日0时0分0秒 = 时间戳
### 1. time() - 获取当前时间, 返回的是时间戳
import time
t1=time.time()
print(t1,type(t1)) # 1608945751.3224735 <class 'float'>
### 2. localtime() - 获取当前本地时间, 返回的是结构体时间
t2 = time.localtime()
print(t2,type(t2)) # <class 'time.struct_time'>
print(f'{t2.tm_year}-{t2.tm_mon}-{t2.tm_mday}-{t2.tm_hour}-{t2.tm_min}-{t2.tm_sec}')
# localtime(时间戳) - 将时间戳转换成本地的结构体时间
t3=time.localtime(0)
print(t3)
t4=time.localtime(1608945751.3224735)
print(t4)
print('********************************练习*********************************')
# 练习1:自己封装一个函数,将结构体时间转换成字符串时间,字符串时间的格式是: 'xxxx年xx月xx日 xx:xx:xx'
# 练习2:自己封装一个函数,将时间戳转换成字符串时间,字符串时间的格式是: 'xxxx年xx月xx日 xx:xx:xx'
def change(struct_time:time.struct_time):
# re=f'{struct_time.tm_year}年{struct_time.tm_mon}月{struct_time.tm_mday}日 {struct_time.tm_hour}:{struct_time.tm_min}:{struct_time.tm_sec}'
return f'{struct_time.tm_year}年{struct_time.tm_mon}月{struct_time.tm_mday}日 {struct_time.tm_hour}:{struct_time.tm_min}:{struct_time.tm_sec}'
print(change(t2))
print('======================================================')
def change2(chuo_time):
re1=time.localtime(chuo_time)
return f'{re1.tm_year}年{re1.tm_mon}月{re1.tm_mday}日 {re1.tm_hour}:{re1.tm_min}:{re1.tm_sec}'
print(change2(time.time()))
print('==========================================================')
def change3(chuo_time,sep:''):
re1=time.localtime(chuo_time)
return f'{re1.tm_year}{sep}{re1.tm_mon}{sep}{re1.tm_mday}{sep}{re1.tm_hour}{sep}{re1.tm_min}{sep}{re1.tm_sec}'
print(change3(time.time(),sep='^-^'))
### 3. 将结构体时间转换成字符串时间
# strftime
时间格式字符串 - 包含时间占位符的字符串
%Y - 年
%m - 月
%d - 日
%H - 时(24小时制)
%I - 时(12小时制)
%M - 分
%S - 秒
%a - 星期(英文单词简写)
%A - 星期(英文单词全拼)
%w - 星期(数字值)
%b - 月份(英文简写)
%B - 月份(英文全拼)
%p - 上午或者下午(AM/PM)
t5=time.localtime()
st5=time.strftime('%Y{y}%m{m}%d{d}',t5).format(y='年',m='月',d='日')
print(st5)
# xxxx-xx-xx
st5=time.strftime('%Y-%m-%d',t5)
print(st5)
# xxxx/xx/xx
st5=time.strftime('%Y/%m/%d',t5)
print(st5)
# 星期几 上午时:分
t6=time.localtime()
st_6=time.strftime('{}%w{}%I{}%M{}',t6).format('星期',' 上午','时 ','分')
print(st_6)
t7=time.localtime()
st_7=time.strftime('%a %p %H:%M')
print(st_7)
# 4.sleep(时间) - 程序暂停指定时间(单位秒)
time.sleep(2)
print('============')
#datetime模块
import datetime
from datetime import datetime,date,time,timedelta
# time - 时分秒
# date - 年月日
# datetime - 年月日时分秒
t1=date.today()
print(t1.year,t1.month,t1.day)
t2=datetime.today()
print(t2)
t2=datetime.now()
print(t2)
t3=datetime(2020,12,31,23,58,40)
print(t3) #2020-12-31 23:58:40
# 让时间t3加20秒
print(t3+timedelta(seconds=20))
# 加分钟
print(t3+timedelta(minutes=2))
# 加天
print(t3+timedelta(days=2))
# hash摘要
hashilib是python自带的一个专门提供hash加密的模块
##1.hash加密的特点
1) 同一个数据通过同一个加密算法得到的结果是一样的 (加密后的结果叫密文或者摘要)
2) 加密后的结果不可逆
3) 不同大小的数据通过相同的算法生成的摘要的长度是一样的
## 2.应用场景
1) 创建数据不可逆的密文(加密)
2) 验证数据的完整性和是否被修改
## 3.怎么生成摘要
# 1) 根据加密算法创建hash对象
hash=hashlib.md5() # 常见的hash算法 : md5、sha相关
# 2)添加加密对象
# hash对象.update(数据)
# 数据必须是bytes对象
hash.update(bytes('1234567',encoding='utf-8'))
# 3) 生成摘要(生成密文)
# hash对象.hexdigest()
result=hash.hexdigest() # hexdigest生成16进制摘要
print(result)
#json数据
## 1.什么是json
json是一种数据格式: 1)一个json有且只有一个数据
2) 这个唯一的数据必须是json支持的数据类型的数据json是一种数据格式: 1)一个json有且只有一个数据
2) 这个唯一的数据必须是json支持的数据类型的数据
## 2.json支持的数据类型
1)数字类型: 包括所有的数字, 整数、浮点数、正数负数, 表示的时候直接写, 支持科学计数法
2)字符串: 只能使用双引号, 支持转移字符。 "abc","abc\n123", "\u4e00abc"
3)布尔: 只有true 和 false 两个值。表示的时候直接写
4)数组: 相当于列表,[元素1,元素2,元素3,...]
5)字典: 相当于python的字典, {键1:值1,键2:值2,...}, 注意:键只能是字符串
6)空值: null
## 3. json数据转python
数字 -- 整型、浮点型
字符串 -- 字符串
布尔 -- 布尔; true->True false->False
数组 -- 列表
字典 -- 字典
null -- None
# json.loads(json数据) - json数据指的是 json格式的字符串(字符串去掉引号之后本身就是一个合法的json数据)
# 'abc' - 不是json格式字符串 '123' - 是json格式字符串 '[10,20,30]'
# '"abc"' - 是json格式字符串 'True' - 不是json格式字符串
import json
re=json.loads('["hello",123,false,null]')
print(re)
re2=json.loads('{"name":"张三","age":18}')
print(re2["name"])
## 4. python数据转json
int、float --> 数字
布尔 --> 布尔: True --> true
字符串 --> 字符串, 引号变成双引号
列表、元组 --> 数组
字典 --> 字典
None --> null
# json.dumps(数据) - 将python数据转换成json格式的字符串!!! !-返回结果是字符串-!
# 120 -> '120'
# 'abc' -> '"abc"'
# {10,20,30} -> 报错!
print(json.dumps('abc'))
mdict={'name':"小明","age":23,10:100}
re=json.dumps(mdict)
print(re,type(re))
print("\u5c0f\u660e")