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

0 投票
5 回答
5894 浏览
提问于 2025-04-17 05:47

我有一个程序,它接收一个以当地时间(以色列时间)表示的日期时间字符串,我需要把它转换成“纪元时间”(也就是从1970年1月1日开始的秒数)。

我可以使用像“UTC +02:00”这样的格式来表示时间,不过问题是,以色列的夏令时和其他国家的夏令时不太一样,所以以色列的时间计算方式会有些不同。有没有办法根据国家来获取纪元时间呢?

5 个回答

0

Python本身没有内置的时区类,只有一个基础类tzinfo,但这个类用处不大。如果你想处理时区问题,需要安装一个额外的包,比如pytz

需要注意的是,当夏令时改变时,会出现模糊的本地时间,也就是说同一个时间可能会出现两次。最好的做法是把时间存储和传输为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)
6
> 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年1月1日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

撰写回答