简体   繁体   English

如何按 python 的顺序获取所有时区日期

[英]How to get all the timezones date in order by python

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但我想让它们按从-9到+14的顺序排列

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',
 ...]

Supposing you are just interested in GMT timezones...假设您只对 GMT 时区感兴趣...

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM