ZetCode

Python time.tzname Function

Last modified April 11, 2025

This comprehensive guide explores Python's time.tzname function, which returns timezone names for local timezone. We'll cover timezone detection, daylight saving time, and practical examples.

Basic Definitions

The time.tzname is a tuple of two strings representing the names of the local timezone when daylight saving time is not in effect and when it is.

Key characteristics: platform-dependent values, relates to system timezone settings, and useful for displaying timezone information to users. The values are not standardized across platforms.

Basic Timezone Name Retrieval

The simplest use of time.tzname gets the local timezone names. This example shows basic usage and interpretation of the values.

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}")

This example demonstrates accessing both timezone names from the tuple. The first element is standard time, the second is daylight saving time.

Note that the values depend on the operating system's timezone configuration. They may be abbreviations (EST, EDT) or full names.

Checking for Daylight Saving Time

time.tzname can be used with time.daylight to check if daylight saving time is active. This example shows the combination.

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]}")

This pattern is useful for displaying the correct timezone name based on whether daylight saving time is currently active.

The time.daylight flag indicates if daylight saving is defined for the local timezone, not necessarily if it's currently active.

Timezone Name with Current Time

This example combines time.tzname with other time functions to display the current time with its timezone name.

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())

The function checks tm_isdst from localtime() to determine which timezone name to use. This provides accurate timezone info.

Note that some platforms may have empty timezone names or only one name defined in the tuple.

Timezone Comparison Across Systems

This example demonstrates how time.tzname values differ across systems by simulating different timezone settings.

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()

The example changes the timezone environment variable and calls tzset() to update the timezone information. This shows how values can vary.

Note: tzset() is only available on Unix-like systems. Windows users would need different approaches.

Custom Timezone Display Function

This example creates a function that provides more user-friendly timezone information using 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())

The function combines timezone names with UTC offset information to create a more complete description of the local timezone settings.

The UTC offset calculation accounts for the sign convention used by time.timezone (negative for east of UTC).

Timezone-Aware Logging

This example shows how to use time.tzname in logging to include timezone information in log messages.

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")

The logging configuration uses the standard timezone name in the format string. This helps when analyzing logs from systems in different timezones.

For more robust timezone handling in logging, consider using the datetime module with timezone support.

Best Practices

Source References

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Python tutorials.