[Python学习日记-48] Python 中的时间处理模块—— time 与 datetime

时间:2024-10-16 07:12:32

[Python学习日记-48] Python 中的时间处理模块

简介

Python 中表示时间的几种方式

UTC 时间

time 模块

datetime 模块

简介

        在平常的代码中,我们常常需要与时间打交道。在 Python 中,与时间处理有关的模块就包括:time、datetime、calendar(基本不用,忽略),下面分别来介绍。

        在写程序时对时间的处理可以归为以下3种:

  • 时间的显示:在屏幕显示、记录日志等
  • 时间的转换:例如把字符串格式的日期转成 Python 中的日期类型
  • 时间的运算:计算两个日期间的差值等

Python 中表示时间的几种方式

1、时间戳(timestamp),表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。例如,1728974668.993554,就是一个时间戳,表示从1970年1月1日00:00:00开始到2024年10月15日14:15:08所经过的秒数。

        为什么是从1970年1月1日00:00:00开始计算呢?这是因为人类第一台搭载 Unix 系统的小型机诞生时间就是1970年,Unix 系统是和硬件一起捆绑售卖的,所以是比较昂贵的,一台 Unix 服务器大概需要十几万一台,像 IBM 就有 AIX Unix,惠普就有 SuperDome2,而 Oracle 通过收购濒临破产的 Sun 公司获得了 Soloris。到了90年代,出现了开源版的 Unix,即大名鼎鼎的 Linux 系统,同时 Windows 系统也差不多在这个时间开始问世,而 Windows 是与 Unix 和 Linux 完全不同架构的一个视窗操作系统。直至今日我们所熟知的 macOS 就是基于 Unix 内核来开发的,所以这就是为什么苹果电脑会如此稳定且昂贵了。

2、格式化的时间字符串,例如 "2020-10-03 17:54"

3、元组(struct_time)共九个元素。由于 Python 的 time 模块实现主要调用 C 库,所以各个平台可能有所不同,Windows 上为:

time.struct_time(tm_year=2024, tm_mon=10, tm_mday=15, tm_hour=15, tm_min=1, tm_sec=51, tm_wday=1, tm_yday=289, tm_isdst=0)

元组(struct_time)中的参数如下: 

索引(Index) 属性(Attribute) 值(Values)
0 tm_year(年) 例如2011
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(时) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 60
6 tm_wday(weekday) 0 - 6(0表示周日)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为-1

UTC 时间

        UTC(Coordinated Universal Time,世界协调时)即格林威治天文时间,世界标准时间。在中国为 UTC+8,又称东8区。DST(Daylight Saving Time)即夏令时。

time 模块

一、localtime()

        将一个时间戳转换为当前时区的 struct_time,语法如下

time.localtime(secs)

        若 secs 参数未提供,则以当前时间为准。演示代码如下

import time

local_time = time.localtime()
print(local_time)

代码输出如下:

注意:time.localtime() 函数返回的时间是当前系统的本地时间,如果你想获取其他时区的时间,可以使用 pytz 库或者 datetime 模块进行处理。

二、gmtime()

        和 localtime() 方法类似,gmtime() 方法是将一个时间戳转换为 UTC 时区(0时区)的 struct_time,语法如下

time.gmtime(secs)

演示代码如下

import time

utc_time = time.gmtime()
print(utc_time)

代码输出如下:

三、time()

         返回当前时间的时间戳,即从纪元(Epoch)开始至今的秒数,语法如下

time.time()

演示代码如下

import time

timestamp = time.time()
print(timestamp)

代码输出如下:

        如果你想将时间戳转换为具体的日期和时间,可以使用 time.localtime() 或者 time.gmtime() 函数,代码如下

import time

local_time = time.localtime(time.time())
print(local_time)

代码输出如下:

注意:time.time() 函数返回的是系统时钟的时间,具体精度可以根据操作系统的能力而有所不同。在一些系统中,时间戳的精度可以达到毫秒级别

四、mktime()

        将一个元组(struct_time)转化为时间戳,语法如下

time.mktime(struct_time)

演示代码如下

import time

local_time = (2022, 10, 1, 9, 30, 0, 0, 0, 0)  # 2022年10月1日 9时30分0秒
timestamp = time.mktime(local_time)
print(timestamp)

代码输出如下:

        time.mktime() 函数使用本地时区的信息,将指定的时间转换为时间戳。它假设输入的时间是本地时间,并且使用本地时区的规则来进行转换。如果输入的时间是 UTC 时间,使用 time.mktime() 函数可能会得到错误的结果。在这种情况下,应该使用 timegm() 函数(来自 calendar 模块)将 UTC 时间转换为时间戳。

        需要注意的是,time.mktime() 函数的输入是一个包含了年、月、日、时、分、秒、星期几、年内的第几天、是否为夏令时等信息的 元组(struct_time)对象。如果只有年、月、日、时、分、秒这六个参数,可以使用 datetime 模块中的 datetime.timetuple() 方法来获得 time.struct_time 对象,然后再使用 time.mktime() 进行转换,代码如下

import time
import datetime

dt = datetime(2022, 10, 1, 9, 30, 0)
local_time = dt.timetuple()
timestamp = time.mktime(local_time)
print(timestamp)

代码输出如下:

五、sleep()

        线程将推迟指定的时间运行,以秒为单位,语法如下

time.sleep(secs)

演示代码如下

import time

print("开始执行")
time.sleep(3)  # 暂停3秒
print("暂停3秒后继续执行")

代码输出如下:

        在使用 time.sleep() 函数时,需要注意以下几点:

  1. time.sleep() 函数会阻塞程序的执行,暂停指定的时间。
  2. time.sleep() 函数接受的参数可以是一个小数,例如0.5表示暂停500毫秒。如果需要更精确的暂停时间,可以使用 time.perf_counter() 函数来计算时间间隔。当程序暂停时,可以通过键盘中断(按下 Ctrl+C)来提前终止暂停,继续执行后续的代码。
  3. time.sleep() 函数是线程安全的,不仅会让当前线程暂停执行,也会让其他线程暂停执行。在某些情况下,time.sleep() 函数的实际暂停时间可能比指定的时间稍长,这是由于系统调度和其他因素导致的。

六、asctime()

        把一个表示时间的元组(struct_time)表示为这种形式:"Sun Oct 1 12:04:38 2019"。如果没有参数,将会将 time.localtime() 作为参数传入,语法如下

time.asctime(t)

演示代码如下

import time

# 获取当前时间
current_time = time.localtime()

# 将当前时间转换为可读的字符串表示形式
readable_time = time.asctime(current_time)

print(readable_time)

代码输出如下:

七、ctime()

        把一个时间戳(按秒计算的浮点数)转化为 time.asctime() 的形式。如果参数未给或者为 None 的时候,将会默认 time.time() 为参数。它的作用相当 time.asctime(time.localtime(secs)),语法如下

time.asctime(secs)

演示代码如下

import time

timestamp = time.time()  # 获取当前时间的时间戳
print(time.ctime(timestamp))  # 将时间戳转换为字符串表示形式

代码输出如下:

八、strftime()

        把一个代表时间的元组(struct_time)(如由 time.localtime() 和 time.gmtime() 返回)转化为格式化的时间字符串,语法如下

time.strftime(format,t)

        如果参数 t 未指定,将传入 time.localtime() 作为参数, 演示代码如下

import time

# 获取当前时间
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print("当前时间:", current_time)

# 将时间元组转换为时间字符串
time_tuple = (2021, 5, 1, 10, 30, 0, 0, 0, 0)
time_string = time.strftime("%Y-%m-%d %H:%M:%S", time_tuple)
print("时间字符串:", time_string)

代码输出如下:

九、strptime()

        把一个格式化时间字符串转化为元组(struct_time)。实际上它和 strftime() 是逆操作,语法如下

time.strptime(string,format)

演示代码如下

import time

date_string = "2021-12-31 23:59:59"
date_format = "%Y-%m-%d %H:%M:%S"

parsed_date = time.strptime(date_string, date_format)
print(parsed_date)

代码输出如下:

十、字符串转时间格式对应表

格式符号 描述
%a 缩写形式的星期几(例如:Sun)
%A 完整形式的星期几(例如:Sunday)
%b 缩写形式的月份(例如:Jan)
%B 完整形式的月份(例如:January)
%c 日期和时间的字符串表示(例如:Fri Jan 1 09:30:00 2022)
%d 两位数日期(01-31)
%H 两位数的小时(00-23)
%I 两位数的小时(01-12)
%j 一年中的第几天(001-366)
%m 两位数月份(01-12)
%M 两位数的分钟(00-59)
%p AM或PM(例如:AM)
%S 两位数的秒数(00-59)
%U 一年中的第几周(00-53,星期天作为一周的开始)
%w 星期的数字形式(0-6,0代表星期天)
%W 一年中的第几周(00-53,星期一作为一周的开始)
%x 日期的字符串表示(例如:01/01/2022)
%X 时间的字符串表示(例如:09:30:00)
%y 两位数年份(例如:22)
%Y 四位数年份(例如:2022)
%z 对应的是时区偏移量,格式为 ±HHMM 或者 ±HH:MM(例如:+0800 表示东八区,-0400 表示西四区)
%% 对应的是一个'%'字符

十一、 转换关系图

datetime 模块

        相比于 time 模块,datetime 模块的接口则更直观,更容易调用。

一、datetime 模块下定义的几个类

  • datetime.date:表示日期的类。常用的属性有 year、month、day
  • datetime.time:表示时间的类。常用的属性有 hour、minute、second、microsecond
  • datetime.datetime:表示日期时间。
  • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
  • datetime.tzinfo:与时区有关的相关信息。

二、常用方法

1、datetime.now()

        返回当前的 datetime 日期类型,语法如下

datetime.datetime.now()

演示代码如下

import datetime

d = datetime.datetime.now()
# d.timestamp(),d.today(),d.year,d.timetuple()等方法可以调用

print(d.timestamp())
print(d.today())
print(d.year)
print(d.timetuple())

代码输出如下:

2、 date.fromtimestamp()

        把一个时间戳转为 datetime 日期类型,语法如下

datetime.date.fromtimestamp(timestamp)

演示代码如下

import datetime

print(datetime.date.fromtimestamp(1728996992.9763837))

代码输出如下:

3、timedelta()——时间运算

        用于表示时间间隔的类。它可以表示一段时间,如天、小时、分钟、秒等,并可以进行加减运算,语法如下

datetime.timedelta(days,seconds,microseconds,milliseconds,minutes,hours,weeks)

演示代码如下

import datetime

n = datetime.datetime.now()
dt = datetime.timedelta(4,1,2,3,4,5,1)

print("now:",n,"\ndelta_time:",dt)
print("new_time:",n+dt)
print("total_seconds:",dt.total_seconds())

代码输出如下: 

4、replace()——时间替换

        用于创建一个新的 datetime 对象,该对象与原对象具有相同的值,但某些字段被替换为新的值,语法如下

datetime.replace(year,month,day,hour,minute,second,microsecond,tzinfo)

 演示代码如下

import datetime

n = datetime.datetime.now()

print("now_time:",n)
print("replace_time:",n.replace(year=2025,month=10,day=1))

代码输出如下:

三、时区

        在Python中,datetime 模块中的 tzinfo 是一个抽象基类,用于表示时区信息。它定义了以下几个方法:

  • utcoffset(dt):返回时区相对于 UTC 的偏移量,以分钟为单位。如果时区为固定偏移量,则返回一个固定值;如果是动态的偏移量(例如夏时制),则根据给定的 datetime 对象返回相应的偏移量
  • dst(dt):返回当前时区在给定 datetime 对象的时间点上是否处于夏时制。如果没有夏时制,则返回 None。
  • tzname(dt):返回时区的名称,通常是一个字符串。例如,对于美国东部时区,名称是"EST"或"EDT"。
  • fromutc(dt):将给定的 datetime 对象从 UTC 转换到当前时区,并返回转换后的 datetime 对象。

为了使用 tzinfo,必须实现一个具体的子类,以提供有关特定时区的信息,演示代码如下

import datetime

# 自定义时区
class MyTimeZone(datetime.tzinfo):
    def utcoffset(self, d):
        # 返回时区相对于UTC的偏移量
        return datetime.timedelta(hours=8)

    def dst(self, d):
        # 返回夏时制信息
        return datetime.timedelta(hours=1)

    def tzname(self, d):
        # 返回时区名称
        return "My Time Zone"

# 创建一个datetime对象并指定时区
dt = datetime.datetime.now(tz=MyTimeZone())

# 打印时区信息
print(dt.tzinfo)        # 时区信息
print(dt.tzname())      # 时区的名称
print(dt.utcoffset())   # 相对于 UTC 的偏移量
print(dt.dst())         # 是否处于夏时制

代码输出如下:

        上面的代码中,我们创建了一个名为"MyTimeZone"的具体时区对象,并将其传递给 datetime.datetime.now() 方法,以创建一个具有特定时区的 datetime 对象。然后,我们可以使用 tzinfo 对象的方法来获取关于时区的信息。

        由于我们还没有学习面向对象,所以看到这个会有一定难度,其实已经有人早就定义好各个时区的模块,那就是 pytz 模块(非内置,需安装),可以用来创建一个具体的时区对象,在制作国际程序时非常有用,演示代码如下

import datetime
import pytz

print("Asia_Shanghai:",datetime.datetime.now(tz=pytz.timezone('Asia/Shanghai')))
print("America_Chicago:",datetime.datetime.now(tz=pytz.timezone('America/Chicago')))
print(pytz.all_timezones)

代码输出如下:

pytz 模块的所有时区: 

['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Ciudad_Juarez', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Nelson', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Nuuk', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Punta_Arenas', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Troll', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Atyrau', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Barnaul', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Chita', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Famagusta', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qostanay', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Srednekolymsk', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Tomsk', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yangon', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'CET', 'CST6CDT', 'Canada/Atlantic', 'Canada/Central', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'Chile/Continental', 'Chile/EasterIsland', 'Cuba', 'EET', 'EST', 'EST5EDT', 'Egypt', 'Eire', 'Etc/GMT', 'Etc/GMT+0', '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-0', '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/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/UTC', 'Etc/Universal', 'Etc/Zulu', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Astrakhan', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Kirov', 'Europe/Kyiv', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Saratov', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Ulyanovsk', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'HST', 'Hongkong', 'Iceland', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'MST', 'MST7MDT', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'NZ', 'NZ-CHAT', 'Navajo', 'PRC', 'PST8PDT', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Bougainville', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kanton', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap', 'Poland', 'Portugal', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Samoa', 'UTC', 'Universal', 'W-SU', 'WET', 'Zulu']