Документация mktime немного вводит в заблуждение, нет смысла говорить, что она рассчитывается как местное время, скорее, она рассчитывает секунды из Epoch в соответствии с поставляемым кортежем - независимо от местонахождения вашего компьютера.
Если вы хотите выполнить преобразование из utc_tuple в местное время, вы можете сделать следующее:
>>> time.ctime(time.time())
'Fri Sep 13 12:40:08 2013'
>>> utc_tuple = time.gmtime()
>>> time.ctime(time.mktime(utc_tuple))
'Fri Sep 13 10:40:11 2013'
>>> time.ctime(time.mktime(utc_tuple) - time.timezone)
'Fri Sep 13 12:40:11 2013'
Возможно, более точным вопросом было бы, как преобразовать utc_tuple в local_tuple .
Я бы назвал это gm_tuple_to_local_tuple (я предпочитаю длинные и описательные имена):
>>> time.localtime(time.mktime(utc_tuple) - time.timezone)
time.struct_time(tm_year=2013, tm_mon=9, tm_mday=13, tm_hour=12, tm_min=40, tm_sec=11, tm_wday=4, tm_yday=256, tm_isdst=1)
Validatation:
>>> time.ctime(time.mktime(time.localtime(time.mktime(utc_tuple) - time.timezone)))
'Fri Sep 13 12:40:11 2013'
Надеюсь, это поможет,
Ша.