#!/usr/bin/env python3 import json import os import sys import zoneinfo from datetime import datetime, timedelta ZULIP_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../") sys.path.insert(0, ZULIP_PATH) from zerver.lib.timezone import get_canonical_timezone_map OUT_PATH = os.path.join(ZULIP_PATH, "web", "generated", "timezones.json") def get_utc_offset(tz_name: str) -> str: """Get UTC offset for a timezone in the format UTC(+HH:MM).""" try: now = datetime.now(zoneinfo.ZoneInfo(tz_name)) offset: timedelta | None = now.utcoffset() if offset is None: return "UTC(+00:00)" offset_seconds = offset.total_seconds() hours, remainder = divmod(offset_seconds, 3600) minutes = remainder // 60 if minutes == 0: return f"UTC{int(hours):+d}" return f"UTC{int(hours):+d}:{int(minutes):02d}" except Exception as e: print(f"Error processing {tz_name}: {e}") return "UTC(?)" timezones = sorted( zoneinfo.available_timezones() - {"Factory", "localtime"} - set(get_canonical_timezone_map()) ) timezone_data = [{"name": tz, "utc_offset": get_utc_offset(tz)} for tz in timezones] with open(OUT_PATH, "w") as f: json.dump({"timezones": timezone_data}, f)