[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() 函数时,需要注意以下几点:
- time.sleep() 函数会阻塞程序的执行,暂停指定的时间。
- time.sleep() 函数接受的参数可以是一个小数,例如0.5表示暂停500毫秒。如果需要更精确的暂停时间,可以使用 time.perf_counter() 函数来计算时间间隔。当程序暂停时,可以通过键盘中断(按下 Ctrl+C)来提前终止暂停,继续执行后续的代码。
- 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']