Python Snippets

Python Unix 时间戳代码片段

Python 示例,涵盖当前 Unix 时间、时间戳到 datetime 的转换、UTC 处理、毫秒,以及用标准库格式化日期输出。

Current Unix timestamp (seconds)
import time
int(time.time())
Current Unix timestamp (milliseconds)
import time
int(time.time() * 1000)
datetime from timestamp (local)
import datetime
datetime.datetime.fromtimestamp(1700000000)
datetime from timestamp (UTC)
import datetime
datetime.datetime.utcfromtimestamp(1700000000)
# Python 3.2+:
datetime.datetime.fromtimestamp(1700000000, tz=datetime.timezone.utc)
Formatted string
import datetime
dt = datetime.datetime.fromtimestamp(1700000000)
dt.strftime("%Y-%m-%d %H:%M:%S")
Timestamp from datetime
import datetime
dt = datetime.datetime(2023, 11, 15, 6, 13, 20, tzinfo=datetime.timezone.utc)
int(dt.timestamp())

Python 时间戳基础

Python 的 time.time() 以浮点数返回自 Unix 纪元以来的秒数。用 int() 包裹得到整数 Unix 秒,或在需要毫秒时乘以 1000。

带时区的 datetime 输出

使用 datetime.fromtimestamp(ts, tz=datetime.timezone.utc) 获得明确的 UTC 输出。在为日志、API 或数据库行生成值时,避免依赖服务器的本地时区。

Python 生产注意事项

Python 让创建 naive 和带时区的 datetime 值都很容易,因此要有意识地决定哪一种会跨越系统边界。对 API、计划任务和数据库写入使用带时区的 UTC datetime。仅在显示、报表或明确依赖本地日历的业务规则中,才转换为本地时区。

  • 在脚本和命令行工具中用 int(time.time()) 得到整数 Unix 秒
  • 仅当接收系统期望毫秒时才用 int(time.time() * 1000)
  • 为获得可移植的输出,使用 datetime.fromtimestamp(ts, tz=timezone.utc) 而非本地的 fromtimestamp
  • 当你在日志或 JSON 中需要可读的 UTC 值时,使用 .isoformat()

Python 中的 datetime today:datetime.today() 与 datetime.now()

常见的 Python 搜索「datetime today python」「today timestamp python」或「datetime now python utc」由 datetime 模块解答。datetime.today() 和 datetime.now() 几乎相同——两者都返回一个 naive 的本地 datetime。对于现代代码,优先使用 datetime.now(timezone.utc),它返回一个带时区的 UTC 值,可安全转换为 Unix 时间戳。

  • datetime.today() → 本地时区的 naive datetime(未附带 tzinfo)
  • datetime.now() → 除非传入 tz 参数,否则与 today() 相同
  • datetime.now(timezone.utc) → 带时区的 UTC datetime(新代码首选)
  • datetime.now(timezone.utc).timestamp() → 当前 Unix 纪元秒(float)
  • date.today() → 今天的日期,无时间部分(date 对象,而非 datetime)
  • int(time.time()) → 当前 Unix 秒(int)——最简形式
  • time.time_ns() → 当前纪元纳秒(Python 3.7+)

Python 中字符串转 datetime、datetime 转字符串

搜索「string to datetime python」「py datetime to string」或「datetime to string」的 Python 用户想要 strptime/strftime 或 datetime.fromisoformat()。对 ISO 8601 输入使用 fromisoformat()(Python 3.7+;3.11 支持包含 UTC 偏移的完整 ISO 8601)。

  • 字符串转 datetime(Python):datetime.fromisoformat('2024-03-15T14:30:00+00:00')——ISO 8601 首选
  • 字符串转 datetime(Python,自定义格式):datetime.strptime('2024-03-15 14:30:00', '%Y-%m-%d %H:%M:%S')
  • Py datetime to string / datetime to string:dt.isoformat() 返回 '2024-03-15T14:30:00+00:00'
  • Py datetime to string(自定义格式):dt.strftime('%Y-%m-%d %H:%M:%S') 返回 '2024-03-15 14:30:00'
  • ISO 8601 往返:datetime.fromisoformat(s).isoformat()——返回相同的字符串
  • 对于 Unix 时间戳:dt.timestamp()(秒 float);整数秒用 int(dt.timestamp())
  • Python convert string to date / convert string to date——ISO 8601 用 datetime.fromisoformat(s);自定义格式用 datetime.strptime(s, fmt)
  • Python 仅日期输出:date.fromisoformat('2024-03-15') 返回一个 date 对象(无时间)

FAQ

time.time() 返回整数吗?
不。它以浮点值返回秒。用 int() 包裹得到整数 Unix 秒,或在需要毫秒时先乘后取整。
datetime 值应是 naive 还是带时区?
对 API、数据库和日志使用带时区的 UTC datetime 值。最好在系统边界避免使用 naive datetime 值,因为它们的时区含义是隐式的。