如何使用偏移格式化小时

时间:2018-03-19 20:31:56

标签: python datetime time

我有一个表示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')

1 个答案:

答案 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函数,因此它们也很容易创建)。