ZetCode

Python time.altzone 函数

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

本综合指南探讨了 Python 的 time.altzone 函数,该函数返回本地夏令时 (DST) 时区相对于 UTC 的偏移量,单位为秒,西为正。我们将介绍时区计算、夏令时处理和示例。

基本定义

time.altzone 函数返回本地夏令时 (DST) 时区相对于 UTC 的偏移量,单位为秒(欧洲大部分地区为负,美国为正)。它是 time.timezone 的 DST 版本。

主要特征:返回整数秒,UTC 以东为负,UTC 以西为正,并表示适用的 DST 时区偏移量。对于给定的 Python 进程,该值是恒定的。

基本时区偏移

此示例演示了 time.altzone 的基本用法,以获取 DST 时区偏移量并将其转换为小时以提高可读性。

basic_altzone.py
import time

# Get DST timezone offset in seconds
dst_offset = time.altzone
print(f"DST timezone offset in seconds: {dst_offset}")

# Convert to hours
dst_hours = dst_offset / 3600
print(f"DST timezone offset in hours: {dst_hours:.1f}")

# Compare with standard timezone offset
std_offset = time.timezone
print(f"Standard offset: {std_offset/3600:.1f} hours")
print(f"Difference: {(std_offset - dst_offset)/3600:.1f} hours")

这演示了获取 DST 偏移量并将其与标准时区偏移量进行比较。该差异通常显示 DST 调整量。

除以 3600 将秒转换为小时,:.1f 格式显示一位小数以提高可读性。

检查夏令时

此示例将 time.altzonetime.localtime 结合使用,以确定当前是否启用夏令时。

check_dst.py
import time

def is_dst_active():
    local_time = time.localtime()
    return local_time.tm_isdst > 0

# Check current DST status
if is_dst_active():
    print("Daylight Savings Time is currently active")
    print(f"DST offset: {time.altzone/3600:.1f} hours from UTC")
else:
    print("Standard time is currently active")
    print(f"Standard offset: {time.timezone/3600:.1f} hours from UTC")

localtime 结构中的 tm_isdst 标志指示 DST 状态。 激活后,time.altzone 提供正确的 UTC 偏移量。

这对于需要根据 DST 调整行为的应用程序很有用。

带 DST 的时区转换

此示例演示了如何将 UTC 时间戳转换为本地时间,同时考虑适当的时区偏移量(标准或 DST)。

timezone_conversion.py
import time

def utc_to_local(utc_timestamp):
    # Get local time struct to check DST
    local_time = time.localtime(utc_timestamp)
    
    # Use appropriate offset based on DST
    offset = time.altzone if local_time.tm_isdst > 0 else time.timezone
    
    # Apply offset (note: altzone/timezone are west of UTC)
    local_timestamp = utc_timestamp - offset
    return time.localtime(local_timestamp)

# Current UTC time
utc_now = time.time()
local_now = utc_to_local(utc_now)

print("UTC time:", time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(utc_now)))
print("Local time:", time.strftime('%Y-%m-%d %H:%M:%S', local_now))

此函数根据给定时间戳是否启用 DST 自动选择正确的偏移量(altzonetimezone)。

转换考虑了这些偏移量位于 UTC 以西的事实,需要减法才能转换为本地时间。

时区感知的时间差

此示例使用 time.altzone 计算考虑了 DST 偏移量的位置之间的时间差。

time_difference.py
import time

def get_local_offset():
    # Returns current local offset in hours
    lt = time.localtime()
    offset = time.altzone if lt.tm_isdst > 0 else time.timezone
    return offset / 3600

def time_difference(hours_ahead):
    local_offset = get_local_offset()
    remote_offset = local_offset + hours_ahead
    
    print(f"Local timezone offset: {local_offset:.1f} hours from UTC")
    print(f"Remote timezone offset: {remote_offset:.1f} hours from UTC")
    print(f"Time difference: {hours_ahead} hours")

# Calculate difference with a location 3 hours ahead
time_difference(3)

这演示了计算考虑了本地 DST 状态的时间差。当 DST 处于活动状态时,该函数使用 altzone 以获得准确的结果。

此模式对于处理多个时区的应用程序很有用。

显示时区信息

此示例使用 time.altzone 和相关函数创建一个全面的时区信息显示。

timezone_info.py
import time

def display_timezone_info():
    local_time = time.localtime()
    is_dst = local_time.tm_isdst > 0
    
    print("\nCurrent Timezone Information")
    print("===========================")
    print(f"Current local time: {time.strftime('%Y-%m-%d %H:%M:%S', local_time)}")
    print(f"Daylight Savings Time active: {'Yes' if is_dst else 'No'}")
    
    if is_dst:
        print(f"\nDST Timezone (altzone):")
        print(f"Offset: {time.altzone} seconds")
        print(f"Hours from UTC: {time.altzone/3600:.1f}")
    else:
        print(f"\nStandard Timezone (timezone):")
        print(f"Offset: {time.timezone} seconds")
        print(f"Hours from UTC: {time.timezone/3600:.1f}")
    
    print(f"\nTimezone name: {time.tzname[is_dst]}")
    print(f"UTC time: {time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime())}")

display_timezone_info()

此函数提供了当前时区情况的完整概述,包括 DST 是否处于活动状态以及相应的 UTC 偏移量。

tzname 元组提供标准和 DST 的时区名称。

处理文件时间戳中的时区

此示例演示了如何使用 time.altzone 正确处理文件时间戳,同时考虑本地时区和 DST。

file_timestamps.py
import time
import os

def get_local_filetime(filepath):
    mtime = os.path.getmtime(filepath)
    local_time = time.localtime(mtime)
    
    # Determine correct offset
    offset = time.altzone if local_time.tm_isdst > 0 else time.timezone
    
    # Format with timezone info
    time_str = time.strftime('%Y-%m-%d %H:%M:%S', local_time)
    tz_str = f"UTC{offset/3600:+.1f}"
    
    return f"{time_str} {tz_str}"

# Example usage
file_path = __file__  # Use current script as example
print(f"File last modified: {get_local_filetime(file_path)}")

此函数提供准确的本地文件时间戳,包括适当的时区偏移量,并在适用时针对 DST 进行调整。

:+.1f 格式确保时区偏移量显示带有符号。

最佳实践

资料来源

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 我从 2007 年开始撰写编程文章。迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程