杰瑞科技汇

Python如何生成当前时间戳?

在 Python 中生成时间戳(timestamp)非常简单,主要使用 timedatetime 这两个标准库,时间戳是指从 1970年1月1日 00:00:00 UTC(也称为 Unix 纪元)到某个时间点所经过的秒数。

下面我将详细介绍几种常用方法,并附上代码示例。


使用 time 模块(最常用)

time 模块是 Python 中处理时间最基础、最直接的模块。

获取当前时间戳

使用 time.time() 可以直接获取当前时间的 UTC 时间戳,这个值是一个浮点数,小数部分代表毫秒。

import time
# 获取当前时间戳(UTC)
current_timestamp = time.time()
print(f"当前时间戳: {current_timestamp}")
print(f"类型: {type(current_timestamp)}")
# 示例输出:
# 当前时间戳: 1678886400.123456
# 类型: <class 'float'>

将时间戳转换为可读时间(时间元组)

time.localtime(timestamp) 可以将一个时间戳转换为本地时间的 struct_time 对象(也称为时间元组)。

import time
# 假设有一个时间戳
timestamp = 1678886400.123456
# 将时间戳转换为本地时间的 struct_time 对象
local_time_tuple = time.localtime(timestamp)
print(f"本地时间元组: {local_time_tuple}")
print(f"年: {local_time_tuple.tm_year}")
print(f"月: {local_time_tuple.tm_mon}")
print(f"日: {local_time_tuple.tm_mday}")
print(f"时: {local_time_tuple.tm_hour}")
print(f"分: {local_time_tuple.tm_min}")
print(f"秒: {local_time_tuple.tm_sec}")
# 示例输出:
# 本地时间元组: time.struct_time(tm_year=2025, tm_mon=3, tm_mday=15, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=2, tm_yday=74, tm_isdst=0)
# 年: 2025
# 月: 3
# 日: 15
# 时: 10
# 分: 40
# 秒: 0

将时间元组格式化为字符串

time.strftime(format, time_tuple) 可以将时间元组格式化为自定义的字符串。

import time
timestamp = 1678886400
local_time_tuple = time.localtime(timestamp)
# 格式化为 "YYYY-MM-DD HH:MM:SS" 格式
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time_tuple)
print(f"格式化后的时间: {formatted_time}")
# 格式化为其他格式
formatted_time_2 = time.strftime("%Y/%m/%d %H-%M-%S", local_time_tuple)
print(f"另一种格式: {formatted_time_2}")
# 示例输出:
# 格式化后的时间: 2025-03-15 10:40:00
# 另一种格式: 2025/03/15 10-40-00

常用格式化符号:

  • %Y: 四位数的年份 (e.g., 2025)
  • %m: 两位数的月份 (01-12)
  • %d: 两位数的日期 (01-31)
  • %H: 24小时制的小时 (00-23)
  • %M: 分钟 (00-59)
  • %S: 秒 (00-59)

使用 datetime 模块(更现代、更面向对象)

datetime 模块提供了更高级、更直观的日期和时间处理功能。

获取当前时间戳

datetime 模块本身不直接生成时间戳,但可以轻松地将 datetime 对象转换为时间戳。

import datetime
# 1. 获取当前的 datetime 对象(默认是本地时间)
now = datetime.datetime.now()
print(f"当前 datetime 对象: {now}")
print(f"类型: {type(now)}")
# 2. 将 datetime 对象转换为时间戳
timestamp_from_datetime = now.timestamp()
print(f"从 datetime 对象生成的时间戳: {timestamp_from_datetime}")
# 3. 获取当前的 UTC datetime 对象并转换为时间戳
now_utc = datetime.datetime.utcnow()
timestamp_utc = now_utc.timestamp()
print(f"从 UTC datetime 对象生成的时间戳: {timestamp_utc}")
# 示例输出:
# 当前 datetime 对象: 2025-03-15 18:40:00.123456
# 类型: <class 'datetime.datetime'>
# 从 datetime 对象生成的时间戳: 1678886400.123456
# 从 UTC datetime 对象生成的时间戳: 1678886400.123456

注意datetime.datetime.now() 返回的是本地时间的 datetime 对象,而 .timestamp() 方法会将其正确地转换为 UTC 时间戳。datetime.datetime.utcnow() 返回的是 UTC 时间的 datetime 对象,.timestamp() 的结果与前者相同。

将时间戳转换为 datetime 对象

这是 datetime 模块的一大优势,非常直观。

import datetime
timestamp = 1678886400
# 将时间戳转换为 datetime 对象
dt_object = datetime.datetime.fromtimestamp(timestamp)
print(f"从时间戳转换的 datetime 对象: {dt_object}")
print(f"类型: {type(dt_object)}")
# 示例输出:
# 从时间戳转换的 datetime 对象: 2025-03-15 10:40:00
# 类型: <class 'datetime.datetime'>

格式化 datetime 对象

datetime 对象有自己的 strftime() 方法,使用方法与 time 模块相同。

import datetime
timestamp = 1678886400
dt_object = datetime.datetime.fromtimestamp(timestamp)
# 格式化为字符串
formatted_time = dt_object.strftime("%Y-%m-%d %H:%M:%S")
print(f"格式化后的时间: {formatted_time}")
# 示例输出:
# 格式化后的时间: 2025-03-15 10:40:00

总结与对比

功能 time 模块 datetime 模块 推荐场景
获取当前时间戳 time.time() datetime.now().timestamp() time.time() 更直接,性能稍好。datetime 方法则更面向对象。
时间戳转时间 time.localtime() datetime.fromtimestamp() datetime 的方法更直观,返回的是一个功能强大的对象,而不是元组。
时间转时间戳 无直接方法 datetime_object.timestamp() datetime 模块提供了完整的双向转换。
格式化时间 time.strftime() datetime_object.strftime() 功能和使用方式相同。
  • 如果只是简单地获取或使用时间戳time.time() 是最快、最简单的方法。
  • 如果需要进行复杂的日期时间计算、格式化、时区转换等操作,强烈推荐使用 datetime 模块,因为它更强大、更易于理解,也更符合现代 Python 编程的风格。

对于大多数现代应用,datetime 模块是更好的选择。

分享:
扫描分享到社交APP
上一篇
下一篇