我有一个程序,它接收当地时间(以色列(的日期-时间字符串,我需要将其转换为epoch秒。
我想我可以使用"UTC+02:00"这样的格式,但问题是,由于节省了白天的时间,以色列手表的表现与其他国家不同。有没有办法让纪元时间取决于国家?
> 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"(在耶路撒冷(。
为了将其转换为epoch秒(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
Python除了基类tzinfo之外,不包括任何内置的时区类,这是无用的。您需要安装另一个软件包,如pytz。
请注意,当夏令时发生两次变化时,您会遇到当地时间不明确的问题。如果您可以以UTC存储和传输时间,并且只在显示时进行转换,那么这总是最好的。我意识到这并不总是可能的。
是的。pytz
模块集成了政治时区的Olson数据库,允许您构建本地时间对象并在时区之间转换。你可以按名称查找时区。UTC是Etc/UTC
。
要知道是否调整夏令时,请使用:
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)
datetime.datetime.utcfromtimestamp(time.mktime(time.localtime()))