Из http://docs.python.org/library/time.html:
time.mktime(т): Это обратная функция localtime(). Его аргументом является struct_time или полный 9-кортеж (поскольку флаг dst необходим; использовать -1 как dst флаг, если он неизвестен), который выражает время в местное время, а не UTC. Это возвращает число с плавающей запятой, для совместимость со временем(). Если входное значение не может быть представлено как допустимое время, либо OverflowError, либо ValueError будет поднят (что зависит от того, является ли недопустимое значение попадает на Python или C). Самая ранняя дата который он может генерировать зависит от платформы.
Это говорит о том, что вам нужно указать свой кортеж по местному времени, а не UTC. Тем не менее, я хочу указать в UTC; Я не хочу использовать локальный часовой пояс в поле.
Есть ли способ, по которому я могу перейти от даты и времени к отметке времени, где время рассматривается как UTC? Я хочу иметь возможность сохранить все в нормализованной форме UTC (объект datetime), когда я конвертирую в и из временных меток.
Я хочу иметь возможность сделать что-то подобное, и x и y выходят одинаково:
y = datetime.datetime.utcfromtimestamp(time.mktime(x.timetuple()))
x = dateutil.parser.parse('Wed, 27 Oct 2010 22:17:00 GMT')
stamp = time.mktime(x.timetuple())
y = datetime.datetime.utcfromtimestamp(stamp)
x
datetime.datetime(2010, 10, 27, 22, 17, tzinfo=tzutc())
y
datetime.datetime(2010, 10, 28, 6, 17)