我有一个表示UTC小时的整数,我有一个时区的UTC偏移量。如何获得该时区的等效小时数?例如:
date = "Fri Dec 01 12:06:35 +0000 2017"
utc = "-18000"
ts = datetime.strptime(date, '%a %b %d %H:%M:%S +0000 %Y')
答案 0 :(得分:0)
如果您使用datetime
对象,这非常简单:
local_datetime_obj = utc_datetime_obj + datetime.timedelta(seconds=offset)
或者,由于您的offset
目前是字符串,因此请使用int(offset)
。
权利解决方案是从UTC datetime
对象和时区对象中创建一个时区感知的本地datetime
对象。但是,如果您只有一个数字偏移而不是一个完整的时区名称或对象(似乎是相同的),或者如果您没有安装时区数据库等,那么这可能很难,所以我不会得到详情请点击这里。
如果您正在使用原始时间戳,则需要除以以秒为单位将偏移量转换为以小时为单位的偏移量:
local_hour = (utc_hour + offset/3600) % 24
但在许多情况下这会导致问题。例如,如果你在一个半小时的时区并且时间是在一个小时的中间怎么办?如果今天包含DST过渡怎么办?您可以通过在分钟和秒,天以及小时上添加数学,并查找isdst来解决这个问题,等等......但是为什么datetime
为您完成所有这些工作(并且已经大量使用)测试)?
如果您正在使用time.struct_tm
,就像之前的问题编辑一样,您基本上必须将所有值拉出并执行与上一版本相同的数学运算,因为它没有足够的功能是有用的。或者只是不要使用struct_tm
并使用datetime
代替(正如您所注意到的,它们具有相同的strptime
函数,因此它们也很容易创建)。