ZetCode

Python time.tzname 函数

上次修改时间:2025 年 4 月 11 日

本综合指南探讨 Python 的 time.tzname 函数,该函数返回本地时区的时区名称。我们将介绍时区检测、夏令时和实际示例。

基本定义

time.tzname 是一个包含两个字符串的元组,表示本地时区在夏令时无效和有效时的名称。

关键特征:平台相关的值,与系统时区设置相关,可用于向用户显示时区信息。这些值在不同平台上未标准化。

基本时区名称检索

time.tzname 的最简单用法是获取本地时区名称。 此示例显示了基本用法和值的解释。

basic_tzname.py
import time

# Get timezone names
tz_names = time.tzname
print(f"Timezone names: {tz_names}")

# Interpret the values
standard_name, daylight_name = tz_names
print(f"Standard time name: {standard_name}")
print(f"Daylight saving time name: {daylight_name}")

此示例演示了如何从元组访问两个时区名称。第一个元素是标准时间,第二个是夏令时。

请注意,这些值取决于操作系统的时区配置。它们可能是缩写(EST、EDT)或全名。

检查夏令时

time.tzname 可以与 time.daylight 结合使用来检查夏令时是否有效。此示例显示了组合用法。

daylight_check.py
import time

# Get current timezone information
current_tz = time.tzname[time.daylight] if time.daylight else time.tzname[0]

print(f"Current timezone: {current_tz}")
print(f"Is daylight saving time active? {'Yes' if time.daylight else 'No'}")

if time.daylight:
    print(f"Standard time name: {time.tzname[0]}")
    print(f"Daylight saving name: {time.tzname[1]}")

此模式对于基于夏令时当前是否有效来显示正确的时区名称非常有用。

time.daylight 标志指示是否为本地时区定义了夏令时,而不一定是指当前是否有效。

带有当前时间的时区名称

此示例将 time.tzname 与其他时间函数结合使用,以显示当前时间及其时区名称。

current_time_with_tz.py
import time

def get_current_time_with_tz():
    now = time.localtime()
    tz_name = time.tzname[now.tm_isdst] if time.tzname else "Unknown"
    return f"{time.strftime('%Y-%m-%d %H:%M:%S', now)} {tz_name}"

print("Current local time with timezone:")
print(get_current_time_with_tz())

该函数检查来自 localtime()tm_isdst 以确定使用哪个时区名称。这提供了准确的时区信息。

请注意,某些平台可能具有空时区名称或仅在元组中定义了一个名称。

跨系统的时区比较

此示例演示了通过模拟不同的时区设置,time.tzname 值在不同系统上的差异。

tz_comparison.py
import os
import time
from datetime import datetime

def show_tz_info():
    print(f"\nCurrent time: {datetime.now()}")
    print(f"Timezone names: {time.tzname}")
    print(f"UTC offset: {time.timezone // 3600} hours")
    print(f"Daylight saving flag: {time.daylight}")

# Original timezone
print("Original timezone:")
show_tz_info()

# Simulate different timezone (Unix-like systems)
os.environ['TZ'] = 'America/New_York'
time.tzset()
print("\nAfter setting TZ to America/New_York:")
show_tz_info()

# Simulate UTC
os.environ['TZ'] = 'UTC'
time.tzset()
print("\nAfter setting TZ to UTC:")
show_tz_info()

该示例更改了时区环境变量并调用 tzset() 以更新时区信息。 这显示了这些值如何变化。

注意:tzset() 仅在类 Unix 系统上可用。 Windows 用户需要不同的方法。

自定义时区显示函数

此示例创建一个函数,该函数使用 time.tzname 提供更用户友好的时区信息。

friendly_tz.py
import time

def get_friendly_timezone():
    if not time.tzname:
        return "Timezone information not available"
    
    standard, daylight = time.tzname
    utc_offset = -time.timezone // 3600  # Convert seconds to hours
    
    if not time.daylight:
        return f"{standard} (UTC{utc_offset:+d})"
    
    dst_offset = utc_offset + 1
    return (f"{standard} (UTC{utc_offset:+d}) standard time, "
            f"{daylight} (UTC{dst_offset:+d}) daylight time")

print("Current timezone information:")
print(get_friendly_timezone())

该函数将时区名称与 UTC 偏移信息结合起来,以创建对本地时区设置的更完整的描述。

UTC 偏移计算考虑了 time.timezone 使用的符号约定(UTC 以东为负)。

支持时区的日志记录

此示例显示了如何在日志记录中使用 time.tzname 以在日志消息中包含时区信息。

tz_logging.py
import time
import logging

def configure_logging():
    tz_info = time.tzname[0]
    logging.basicConfig(
        format='%(asctime)s ' + tz_info + ' %(levelname)s: %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',
        level=logging.INFO
    )

configure_logging()
logging.info("This log message includes timezone information")
logging.warning("Sample warning message with timezone context")

日志记录配置在格式字符串中使用标准时区名称。这有助于分析来自不同时区系统的日志。

为了在日志记录中更可靠地处理时区,请考虑使用支持时区的 datetime 模块。

最佳实践

资料来源

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 至今,我已撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程