Создайте следующую псевдо-временную метку в качестве обходного пути по ограничению библиотеки графического отображения - PullRequest
0 голосов
/ 04 марта 2011

В настоящее время у меня есть следующий пример текущего значения метки времени в секундах.

1299196800.Это означает

4 марта 2011 г. 0: 0: 0 в Гринвиче (GMT)

4 марта 2011 г. 8: 0: 0 в Малайзии (GMT +8)

В настоящее время, если мой скрипт на Python передает 1299196800 в библиотеку JavaScript с графическим отображением, он всегда будет показывать время по Гринвичу 4 March 2011 0:0:0 вместо времени Малайзии 4 March 2011 8:0:0, хотя клиентский компьютер использует часовой пояс Малайзии.

Мой python-сервер всегда будет иметь тот же часовой пояс, что и клиентский компьютер .Мы хотим, чтобы 4 March 2011 8:0:0 был показан на стороне клиента.

Следовательно, для обходного пути по ограничению библиотеки графов с плавающей запятой вместо передачи 1299196800 я хотел бы передать

# 8 is timezone offset.
# 1299196800 is current timestamp.
pseudo_timestamp = 1299196800 + 8 * 60 * 60 

Могу ли я узнать, как я могу сгенерировать вышеуказанное"псевдо отметка времени" в python?Является ли манипулирование с постоянным часовым поясом хорошей идеей?Будут ли возникать какие-либо проблемы, когда наступит дневное время?

Ответы [ 2 ]

3 голосов
/ 04 марта 2011

Время по Гринвичу во флоте является заданным: ищите метку времени здесь , и исправление смещения времени является рекомендуемым решением.

Учтите, что временная метка flot выражается в миллисекундах, поэтому вам придется умножить смещение вашего примера на 1000.

Однако не рекомендуется использовать постоянную временную метку:в общем случае вы пытаетесь обнаружить смещение клиента, но, поскольку вы уверены, что это тот же сервер, вы можете использовать данные сервера для этого.

Используйте time.daytime, чтобы определить, является ли дневной светсохранение активно, а затем используйте time.timezome или time.altzone соответственно, чтобы получить смещение в часах.

Документ Python по времени здесь

Учитывая это, выможете настроить ваши временные метки, преобразовав смещение в миллисекунды и добавив его к своим временным меткам (что вы уже сделали :))

1 голос
/ 04 марта 2011

Вы используете объект времени данных с tzinfo, который осведомлен о часовом поясе. Вот краткий фрагмент того, как вы на самом деле это делаете.

import datetime
from datetime import tzinfo, timedelta

class GMT8(tzinfo):
    def utcoffset(self, dt):
        return timedelta(hours=8)
    def tzname(self, dt):
        return "GMT +8"
    def dst(self,dt):
        return timedelta(0)

malaysiatime = GMT8()

o = datetime.datetime.fromtimestamp(1299196800,malaysiatime)
print o
# prints 2011-03-04 08:00:00+08:00
...