在 Python 中,可以使用 datetime 模块将时间戳(timestamp)转换为 datetime 对象,以下是详细的方法和示例:

方法 1:使用 datetime.fromtimestamp()
适用于将 Unix 时间戳(自 1970-01-01 00:00:00 UTC 以来的秒数)转换为本地时间的 datetime 对象。
from datetime import datetime
# 时间戳(秒)
timestamp = 1625097600 # 示例时间戳
# 转换为本地时间的 datetime 对象
dt_local = datetime.fromtimestamp(timestamp)
print("本地时间:", dt_local) # 输出: 2025-06-30 00:00:00
# 转换为 UTC 时间的 datetime 对象
dt_utc = datetime.utcfromtimestamp(timestamp)
print("UTC时间:", dt_utc) # 输出: 2025-06-30 00:00:00
方法 2:处理毫秒级时间戳
如果时间戳是毫秒级(13位数字),需先除以 1000 再转换:
timestamp_ms = 1625097600000 # 毫秒级时间戳
dt_local = datetime.fromtimestamp(timestamp_ms / 1000)
print("毫秒时间戳转本地时间:", dt_local) # 输出: 2025-06-30 00:00:00
方法 3:指定时区
如果需要处理时区,可以使用 pytz 或 Python 3.9+ 的 zoneinfo:
使用 pytz(需安装:pip install pytz)
from datetime import datetime
import pytz
timestamp = 1625097600
tz = pytz.timezone('Asia/Shanghai') # 指定时区(如上海)
dt_local = datetime.fromtimestamp(timestamp, tz)
print("带时区的本地时间:", dt_local) # 输出: 2025-06-30 08:00:00+08:00
使用 Python 3.9+ 的 zoneinfo(无需安装)
from datetime import datetime
from zoneinfo import ZoneInfo # Python 3.9+
timestamp = 1625097600
tz = ZoneInfo('Asia/Shanghai')
dt_local = datetime.fromtimestamp(timestamp, tz)
print("带时区的本地时间:", dt_local) # 输出: 2025-06-30 08:00:00+08:00
方法 4:反向转换(datetime 转时间戳)
如果需要将 datetime 对象转回时间戳:

dt = datetime(2025, 6, 30, 0, 0, 0)
timestamp = dt.timestamp() # 转换为本地时间戳
print("时间戳:", timestamp) # 输出: 1625097600.0
| 需求 | 方法 |
|---|---|
| 秒级时间戳转本地时间 | datetime.fromtimestamp(timestamp) |
| 毫秒级时间戳转本地时间 | datetime.fromtimestamp(timestamp / 1000) |
| 秒级时间戳转UTC时间 | datetime.utcfromtimestamp(timestamp) |
| 带时区的时间戳转换 | datetime.fromtimestamp(timestamp, tz) |
| datetime 转时间戳 | dt.timestamp() |
根据你的需求选择合适的方法即可!

