Python: strftime, gmtime не соблюдает часовой пояс

import time
print time.strftime("%a, %d %b %Y %I:%M %p %Z", time.gmtime())

Я живу в Калифорнии. По какой-то причине этот код сообщает время в GMT, вместо того, чтобы соблюдать часовой пояс системы. Я знаю, что strftime знает, что я в Тихоокеанском, потому что он все еще печатает "PST" в конце, но он все еще на 8 часов вперед. Кто-нибудь еще замечает это? Кто-нибудь знает, что неправильно с моей системой или моим кодом?

ИЗМЕНИТЬ: запуск date в командной строке дает мне правильную дату. Кроме того, я запускаю это на двух разных компьютерах (mac и linux), и оба они сообщают о 8 часах вперед. Ожидаете ли вы исправления часового пояса перед использованием strftime?

Ответ 1

time.gmtime() возвращает время в UTC. Что вам нужно, time.localtime(), который зависит от часового пояса. Это хорошо документировано в документации time.

EDIT:

Чтобы преобразовать любую временную метку стиля time.time() в struct_time, вы можете указать аргумент time.localtime():

>>> print time.strftime("%a, %d %b %Y %I:%M:%S %p %Z", time.localtime(10.5))
Thu, 01 Jan 1970 02:00:10 AM EET

Ответ 2

Чтобы изменить часовой пояс в вашей системе unix, сделайте следующее:

ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

Просмотрите в /usr/share/zoneinfo/, чтобы найти то, что вы хотите, и измените команду выше

Ответ 3

Если кто-то все еще обращает внимание на этот вопрос. Я на восточном побережье США, т.е. EST, и я не могу получить свое местное время. Проверка "даты" дает понять, что моя система знает, где я, но копирование строки кода выше точно не дает никакого результата.

С другой стороны, этот код: curr_dt_time = (strftime ("% d% b% Y% H:% M:% S", gmtime()))/print curr_dt_time дает мне GMT. Изменение "gmtime" на "localtime" с или без "10.5" ничего не производит - как если бы я ввел ошибку.

Arghhh !!!