时间戳的学习,参照案例学习,一目了然 python import time from datetime import datetime # 获取时间戳 # time.time() 返回浮点数秒数如 1718242573.123456 # int() 转换为整数秒级时间戳 timestamp int(time.time()) print(f当前时间戳: {timestamp}) # 1718242573 # 格式化输出 # strftime() 将datetime对象格式化为字符串 # %Y:4位年份 %m:月份 %d:日期 %H:24小时 %M:分钟 %S:秒 dt datetime.fromtimestamp(timestamp) log_time dt.strftime(%Y-%m-%d %H:%M:%S) print(f可读时间: {log_time}) # 2024-06-12 18:36:13 # 日志示例 log_message f[{log_time}] [INFO] 用户登录成功, 用户ID: 1001 print(log_message) # [2024-06-12 18:36:13] [INFO] 用户登录成功, 用户ID: 1001技术细节time.time()返回UTC时间戳从1970年1月1日UTC零点开始datetime.fromtimestamp()默认转成本地时区时间日志中常用UTC时间戳避免时区混乱场景2数据库存储python import time from datetime import datetime, timezone # 存储为时间戳 # 用时间戳存储数据库可以按数值排序时间先后 user_action { user_id: 1001, action: login, timestamp: int(time.time()) # 存储为整数 } print(f存储数据: {user_action}) # 查询时转换 # 从时间戳还原为可读时间 retrieved_time user_action[timestamp] dt_utc datetime.fromtimestamp(retrieved_time, tztimezone.utc) dt_local datetime.fromtimestamp(retrieved_time) # 本地时区 print(fUTC时间: {dt_utc.strftime(%Y-%m-%d %H:%M:%S)}) print(f本地时间: {dt_local.strftime(%Y-%m-%d %H:%M:%S)})技术细节时间戳是整数占用空间小查询快排序时直接按数值比较大数时间晚UTC时间戳不依赖时区避免数据歧义场景3API交互JSON数据python import time import json from datetime import datetime # 发送数据 # JSON序列化时datetime对象不能直接转换 # 需要转成ISO格式或时间戳 api_data { event: button_click, timestamp: datetime.utcnow().isoformat() Z # ISO 8601格式 } print(f发送数据: {json.dumps(api_data)}) # 接收数据 # 接收时解析ISO格式 received {event: login, timestamp: 2024-06-12T10:36:13Z} # 解析ISO格式 dt_received datetime.fromisoformat(received[timestamp].replace(Z, 00:00)) print(f解析时间: {dt_received})技术细节ISO 8601格式是国际标准人类和机器都可读Z表示UTC时间Zulu timeJSON不支持datetime对象必须转字符串练手代码试试看python # 练习1生成10秒内的时间戳列表 import time timestamps [] for i in range(10): timestamps.append(int(time.time())) time.sleep(1) # 等待1秒 print(10秒内的时间戳:, timestamps) # 练习2计算两个时间戳的差值 t1 int(time.time()) time.sleep(2) # 模拟等待2秒 t2 int(time.time()) difference t2 - t1 print(f时间差: {difference}秒) # 练习3格式化当前时间为多种格式 dt datetime.now() formats { 标准格式: dt.strftime(%Y-%m-%d %H:%M:%S), 中文格式: dt.strftime(%Y年%m月%d日 %H时%M分%S秒), 文件名: dt.strftime(%Y%m%d_%H%M%S) } for name, value in formats.items(): print(f{name}: {value})运行预期练习1生成10个递增的时间戳练习2输出2秒左右练习3显示三种不同格式的当前时间建议学习路径先运行上述代码观察输出修改时间格式字符串观察变化尝试将时间戳转回可读时间思考为什么日志系统用时间戳而不是字符串