Python time.localtime 函数
上次修改时间:2025 年 4 月 11 日
本综合指南探讨了 Python 的 time.localtime 函数,该函数将自 epoch 以来的秒数转换为本地时间结构。我们将介绍时间结构、格式化、时区处理和实际示例。
基本定义
time.localtime 函数将自 epoch 以来的秒数转换为本地时间的时间结构。它返回一个具有时间组件的命名元组。
主要特征:考虑时区和夏令时,返回 struct_time 对象,并且是 time.mktime 的逆函数。该函数接受一个可选的秒数参数。
基本时间结构转换
time.localtime 最简单的用法是将当前时间转换为本地时间结构。此示例显示了基本用法和结构属性。
import time
# Get current local time
local_time = time.localtime()
print("Local time struct:", local_time)
# Access struct components
print(f"Year: {local_time.tm_year}")
print(f"Month: {local_time.tm_mon}")
print(f"Day: {local_time.tm_mday}")
print(f"Hour: {local_time.tm_hour}")
print(f"Minute: {local_time.tm_min}")
print(f"Second: {local_time.tm_sec}")
此示例演示如何获取当前本地时间作为结构并访问其组件。该结构包含年、月、日等。
tm_isdst 标志指示夏令时(DST 为 1,非 DST 为 0,未知为 -1)。
将时间戳转换为本地时间
time.localtime 可以将特定的时间戳转换为本地时间。此示例显示了固定时间戳的转换。
import time
# Unix epoch timestamp (January 1, 1970)
epoch_time = 0
epoch_local = time.localtime(epoch_time)
print("Epoch in local time:", epoch_local)
# Specific timestamp (July 20, 1969 moon landing)
moon_landing = -14159025
moon_local = time.localtime(moon_landing)
print("Moon landing in local time:", moon_local)
# Format the output
formatted = time.strftime("%B %d, %Y at %I:%M %p", moon_local)
print("Formatted moon landing:", formatted)
这显示了如何将历史中的特定时刻转换为本地时间。负时间戳表示 Unix epoch 之前的日期。
strftime 函数将结构格式化为可读的字符串。像 %B (月份名称) 这样的格式代码使输出更具表现力。
比较 localtime 和 gmtime
虽然 localtime 转换为本地时间,但 gmtime 转换为 UTC 时间。此示例比较了这两个函数。
import time
# Get current timestamp
now = time.time()
# Convert to local and UTC time
local = time.localtime(now)
utc = time.gmtime(now)
print("Local time struct:", local)
print("UTC time struct:", utc)
# Calculate timezone offset
hour_diff = local.tm_hour - utc.tm_hour
print(f"Timezone offset: {hour_diff} hours")
本地时间和 UTC 时间之间的差异显示了您的时区偏移量。这因地点和夏令时状态而异。
请注意,当您的时区不是 UTC±0 时,这些结构除了小时分量之外都是相同的。
使用时间结构组件
时间结构允许轻松访问日期组件。此示例显示了结构组件的实际用途。
import time
def is_weekend():
local = time.localtime()
# tm_wday ranges from 0 (Monday) to 6 (Sunday)
return local.tm_wday >= 5
def season():
local = time.localtime()
month = local.tm_mon
if month in (12, 1, 2):
return "Winter"
elif month in (3, 4, 5):
return "Spring"
elif month in (6, 7, 8):
return "Summer"
else:
return "Autumn"
print("Is it weekend?", is_weekend())
print("Current season:", season())
tm_wday 属性给出星期几(0-6),tm_mon 给出月份(1-12)。这些可以在不解析字符串的情况下启用基于日期的逻辑。
当您需要特定的日期组件时,这种方法比字符串解析更有效。
夏令时处理
time.localtime 自动处理夏令时。此示例演示了 DST 检测和调整。
import time
def check_dst():
local = time.localtime()
if local.tm_isdst == 1:
return "Daylight Saving Time is in effect"
elif local.tm_isdst == 0:
return "Standard Time is in effect"
else:
return "DST status unknown"
# Test around DST transition (example for US/Eastern)
dst_start = time.mktime((2025, 3, 9, 2, 0, 0, 0, 0, -1))
dst_end = time.mktime((2025, 11, 2, 2, 0, 0, 0, 0, -1))
print("Current DST status:", check_dst())
print("March 9, 2025 2:00 AM:", time.localtime(dst_start))
print("November 2, 2025 2:00 AM:", time.localtime(dst_end))
tm_isdst 标志指示 DST 状态。当设置为 -1 时,该函数会自动确定 DST 状态。
请注意,DST 转换规则因时区而异。该示例显示了 2025 年美国/东部的转换点。
创建自定义日期字符串
时间结构可以实现灵活的日期格式设置。此示例显示了从本地时间创建自定义字符串。
import time
def friendly_date():
local = time.localtime()
weekday = ["Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday", "Sunday"][local.tm_wday]
month = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November",
"December"][local.tm_mon - 1]
suffix = "th"
if 4 <= local.tm_mday <= 20 or 24 <= local.tm_mday <= 30:
suffix = "th"
else:
suffix = ["st", "nd", "rd"][local.tm_mday % 10 - 1]
return f"{weekday}, {month} {local.tm_mday}{suffix}, {local.tm_year}"
print("Today is:", friendly_date())
这创建了一个人类友好的日期字符串,例如“2025 年 4 月 11 日星期二”。它处理日期的适当序数后缀(st、nd、rd、th)。
该示例演示了当 strftime 未能提供所需的灵活性时,如何进行手动格式设置。
最佳实践
- 时区感知: 请记住,localtime 取决于系统时区设置
- DST 处理: 使用 tm_isdst=-1 自动检测夏令时
- 结构不变性: 时间结构是只读命名元组
- 效率: 优先选择结构属性而不是字符串解析
- 可移植性: 测试跨部署环境的时区行为
资料来源
作者
列出所有 Python 教程。