在python中将本地时间转换为GMT

时间:2011-11-07 13:41:09

标签: python timezone

我有一个程序在当地时间(以色列)收到日期时间字符串,我需要将其转换为纪元秒。

我想我可以使用“UTC +02:00”这样的格式,但问题是,白天节省,Israels手表的行为与其他国家不同。有没有办法让纪元时间依赖于国家?

5 个答案:

答案 0 :(得分:5)

> import pytz
> pytz.country_timezones['il'] # Israel

['Asia/Jerusalem']

这是否描述了您的时区?

如果是,那么您可以使用:

from datetime import datetime
import pytz

a = "2011-11-07 12:34:56"
dt = pytz.timezone('Asia/Jerusalem').localize(datetime.strptime(a, '%Y-%m-%d %H:%M:%S')).astimezone(pytz.utc)

dt现在是datetime.datetime(2011, 11, 7, 10, 34, 56, tzinfo=<UTC>),即“2011-11-07 12:34:56”(耶路撒冷)。

为了将其转换为纪元秒(Unix时间戳,即1970-01-01 00:00:00 UTC后的秒数),您可以直接使用:

import calendar
from datetime import datetime
import pytz

a = "2011-11-07 12:34:56"
epoch = calendar.timegm(pytz.timezone('Asia/Jerusalem').localize(datetime.strptime(a, '%Y-%m-%d %H:%M:%S')).utctimetuple())

# epoch is 1320662096

答案 1 :(得分:0)

Python不包含除基类tzinfo之外的任何内置时区类,这是无用的。您需要安装另一个包,例如pytz

请注意,当夏令时发生变化时,当同一时间发生两次时,您会遇到模糊的本地时间问题。如果您能够以UTC格式存储和传输时间并且仅在显示时进行转换,那么它总是最好的。我意识到这并不总是可能的。

答案 2 :(得分:0)

是的,有。 pytz模块包含Olson database个政治时区,允许您构建本地时间对象并在时区之间进行转换。您可以按名称查找时区。 UTC为Etc/UTC

答案 3 :(得分:0)

要知道是否调整夏令时,请使用:

time.daylight

这似乎对我有用:

>>> time.gmtime(time.mktime(time.strptime("7 Nov 2011 12:12:12", "%d %b %Y %H:%M:%S")))
time.struct_time(tm_year=2011, tm_mon=11, tm_mday=7, tm_hour=19, tm_min=12, tm_sec=12, tm_wday=0, tm_yday=311, tm_isdst=0)

答案 4 :(得分:0)

datetime.datetime.utcfromtimestamp(time.mktime(time.localtime()))