Если ваша «временная метка UTC» представляет собой число с плавающей запятой (достаточно int) «секунд из эпохи», а ваша «местная временная метка» является какой-то странной версией ее, сдвинутой в ваши координаты местного времени (нет «эпохи» кроме UTC) достаточно модуля время в стандартной библиотеке Python.
Как показывают эти документы, в «секундах от эпохи» gmtime
переводит это в кортеж из 9 предметов в UTC, localtime
в кортеж из 9 предметов по местному времени; наоборот, calendar.timegm
(кортеж из 9 элементов UTC в метку времени UTC) и mktime
(кортеж из 9 элементов местного времени в метку времени UTC). Вы заметите, что не существует такой вещи, как «локальная временная метка» (только кортежи из 9 элементов по местному времени, то есть struct_time
экземпляров), просто потому, что такого понятия не существует.
Но, если я правильно понимаю, что вы подразумеваете под «локальной меткой времени», то перевод ее в структурное время «как если бы» это была реальная метка времени, а затем обратно в местное время, даст смещение, к которому вы стремитесь (в секунд). Что касается DST, то немногое говорит о том, включен ли он, - это 9-й элемент из упомянутых нами кортежей.
Например, используя только «локальную метку времени»:
>>> loct
1282453595
>>> time.mktime(time.gmtime(loct)) - loct
28800.0
>>> _ / 3600
8.0
>>>
Здесь написано, что я в 8 часах к западу от UTC. И:
>>> time.localtime(loct)[-1]
1
это говорит о том, что равно с действующим DST.