欢迎光临
我们一直在努力

时间戳的学习,参照案例学习,一目了然

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, tz=timezone.utc)
dt_local = datetime.fromtimestamp(retrieved_time) # 本地时区

print(f"UTC时间: {dt_utc.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"本地时间: {dt_local.strftime('%Y-%m-%d %H:%M:%S')}")

技术细节:

  • 时间戳是整数,占用空间小,查询快
  • 排序时直接按数值比较(大数=时间晚)
  • UTC时间戳不依赖时区,避免数据歧义

场景3:API交互(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 time)
  • JSON不支持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:显示三种不同格式的当前时间

建议学习路径:

  • 先运行上述代码观察输出
  • 修改时间格式字符串,观察变化
  • 尝试将时间戳转回可读时间
  • 思考:为什么日志系统用时间戳而不是字符串?
  • 赞(0)
    未经允许不得转载:171主机测评 » 时间戳的学习,参照案例学习,一目了然
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址