2011-11-07 89 views
0

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

我想我可以使用诸如“UTC +02:00”之类的格式,但问题是,在日间节省下,以色列手表的表现与其他国家不同。有没有办法让时代依赖于国家?

+0

退房datetime模块 –

回答

0

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

请注意,当夏令时发生变化时,当同一时间发生两次时,您将遇到模糊的当地时间问题。如果您可以使用UTC存储和传输时间,并且只在显示时进行转换,那将是最佳选择。我意识到这并不总是可能的。

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”(耶路撒冷)。 (1970-01-01以来UTC 00:00:00 Unix时间戳,即秒)

为了将其转换为划时代秒,你可以直接使用:

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 
0

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

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

'time.daylight'不会帮助你在这里。 'time.mktime()'试图猜测DST本身的输入本地时间('strptime()'设置'is_dst = -1')。在DST更改过程中,有50%的时间可能是错误的。 – jfs

相关问题