0

i create this loop to give all timezones :

import datetime
import pytz

today=datetime.datetime.now(tz=pytz.UTC)
for i in pytz.all_timezones:
    print(today.astimezone(pytz.timezone(i)))

but i want to get them in order from -9 to +14

3 Answers3

1
now = datetime.datetime.now()
tzs = sorted(pytz.all_timezones, key=lambda tz: pytz.timezone(tz).utcoffset(now))

This gives you a list like:

['Etc/GMT+12',
 'Etc/GMT+11',
 'Pacific/Midway',
 'Pacific/Niue',
 'Pacific/Pago_Pago',
 'Pacific/Samoa',
 'US/Samoa',
 'Etc/GMT+10',
 'HST',
 'Pacific/Honolulu',
 ...]
deceze
  • 510,633
  • 85
  • 743
  • 889
0

Supposing you are just interested in GMT timezones...

from datetime import datetime
from pytz import UTC, all_timezones, timezone, UnknownTimeZoneError

now = datetime.now(tz=UTC)

print('Timezones should be similar to these...')
timezones_candidates = [tz for tz in all_timezones if 'GMT' in tz]
print(timezones_candidates)

first = -14
last = +9
desired_timezones = ['Etc/GMT{0:+}'.format(shift) for shift in range(first, last+1)] 

print('\nNow as timezone:')
for tz in desired_timezones:
  try:  
    print(now.astimezone(timezone(tz)))

  except UnknownTimeZoneError:
    print('The timezone {0} doesnt exist'.format(tz))
-1
import datetime
import pytz

today=datetime.datetime.now(tz=pytz.UTC)
ordered = {}
for i in pytz.all_timezones:
  timezone = today.astimezone(pytz.timezone(i))
  gmt = str(timezone)[-6:-3]
  gmt = (-1 if gmt[0] == '-' else 1) * int(gmt[1:])
  ordered[pytz.timezone(i)] = gmt
for timezone, _ in sorted(ordered.items(), key=lambda item: item[1]):
  print(today.astimezone(timezone))
Metehan
  • 729
  • 5
  • 22