cosmopolitan/third_party/tz/windows.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

153 lines
3.1 KiB
Python
Raw Normal View History

# Thank you Alejandro Zeise for collecting this information
# https://gist.github.com/alejzeis/ad5827eb14b5c22109ba652a1a267af5
SUPPORTED = set((
'Africa/Algiers',
'Africa/Cairo',
'Africa/Johannesburg',
'Africa/Lagos',
'Africa/Nairobi',
'America/Anchorage',
'America/Argentina/Buenos_Aires',
'America/Bogota',
'America/Chicago',
'America/Denver',
'America/Lima',
'America/Los_Angeles',
'America/Mexico_City',
'America/New_York',
'America/Phoenix',
'America/Santiago',
'America/Sao_Paulo',
'Asia/Bangkok',
'Asia/Dhaka',
'Asia/Dubai',
'Asia/Hong_Kong',
'Asia/Jakarta',
'Asia/Jerusalem',
'Asia/Kabul',
'Asia/Karachi',
'Asia/Kolkata',
'Asia/Manila',
'Asia/Seoul',
'Asia/Shanghai',
'Asia/Singapore',
'Asia/Taipei',
'Asia/Tehran',
'Asia/Tokyo',
'Australia/Adelaide',
'Australia/Brisbane',
'Australia/Melbourne',
'Australia/Perth',
'Australia/Sydney',
'CET',
'CST6CDT',
'EET',
'EST',
'EST5EDT',
'Etc/GMT',
'Etc/GMT+1',
'Etc/GMT+10',
'Etc/GMT+11',
'Etc/GMT+12',
'Etc/GMT+2',
'Etc/GMT+3',
'Etc/GMT+4',
'Etc/GMT+5',
'Etc/GMT+6',
'Etc/GMT+7',
'Etc/GMT+8',
'Etc/GMT+9',
'Etc/GMT-1',
'Etc/GMT-10',
'Etc/GMT-11',
'Etc/GMT-12',
'Etc/GMT-13',
'Etc/GMT-14',
'Etc/GMT-2',
'Etc/GMT-3',
'Etc/GMT-4',
'Etc/GMT-5',
'Etc/GMT-6',
'Etc/GMT-7',
'Etc/GMT-8',
'Etc/GMT-9',
'Etc/UTC',
'Europe/Brussels',
'Europe/Bucharest',
'Europe/Dublin',
'Europe/Istanbul',
'GMT',
'HST',
'MET',
'MST',
'MST7MDT',
'PST8PDT',
'Pacific/Auckland',
'Pacific/Fiji',
'Pacific/Guam',
'Pacific/Honolulu',
'Pacific/Port_Moresby',
'WET',
))
import re
import os
import subprocess
NAMES = set()
ZONES = set()
SUPERFLUOUS = set()
TABLE1 = []
TABLE2 = []
with open("/home/jart/scratch/windows-timezone-mappings.csv") as f:
for line in f:
line = line.strip()
if not line:
break
name, what, zone = line.split(',')
if name in NAMES:
continue
ZZ = zone.split() # has superfluous zones
ZZ = [z for z in ZZ if z in SUPPORTED] + [z for z in ZZ if z not in SUPPORTED]
zone = ZZ[0]
rest = ZZ[1:]
NAMES.add(name)
ZONES.add(ZZ[0])
SUPERFLUOUS |= set(rest)
os.environ['TZ'] = zone
p = subprocess.Popen(['date', '+%z@%Z'], stdout=subprocess.PIPE)
z, Z = p.stdout.read().decode('utf-8').strip().split('@')
print("%-35s %-5s %-10s %-10s %-30s" % (name, what, z, Z, zone))
if zone in SUPPORTED:
TABLE1.append((name, zone, z, Z))
else:
TABLE2.append((name, zone, z, Z))
print()
TABLE1.sort()
TABLE2.sort()
for k, v, z, Z in TABLE1:
print('{"%s", "%s"}, // %s %s' % (k, v, z, Z))
print('#ifdef EMBED_EVERY_TIME_ZONE')
for k, v, z, Z in TABLE2:
print('{"%s", "%s"}, // %s %s' % (k, v, z, Z))
print('#endif')
# print()
# TABLE.sort(key=lambda x: (int(x[2]), x[1]))
# for k, v, z, Z in TABLE:
# if re.search(r'[A-Z]', Z):
# Z = ' ' + Z
# else:
# Z = ''
# print('__static_yoink("usr/share/zoneinfo/%s"); // %s%s (%s)' % (v, z, Z, k))
# print('#ifdef EMBED_EVERY_TIME_ZONE')
# print('#endif')
# print()
# SUPERFLUOUS -= ZONES
# for z in SUPERFLUOUS:
# print(z)