Я пытаюсь преобразовать вызов API Javascript в Python. Рабочий код javascript работает нормально, генерируя метку времени, подобную этой:
var curdate = new Date();
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;
Этот результат (это количество секунд с начала эпохи) впоследствии хешируется и используется в вызове API, но это соответствующий раздел. Если кто-нибудь может сообщить мне, как правильно преобразовать это, я был бы очень признателен.
Вот некоторые подробности о различных результатах разных методов:
Javascript (действительный результат API)
var curdate = new Date(2013, 7, 10);
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;
Результат: 1376089200
Python (неверный результат API)
from datetime import datetime
import calendar
d = datetime(2013, 8, 10)
calendar.timegm(d.utctimetuple())
Результат: 1376092800
Я явно чего-то упускаю, может ли кто-нибудь просветить меня по этому поводу?
Обновлять
Изначально я допустил ошибку в своих примерах, так как Javascript использует даты на основе 0, а даты Python - на основе 1.
Джонатон любезно объяснил, что разница в значениях отличается из-за того, что Python по умолчанию использует UTC, тогда как Javascript по умолчанию использует местный часовой пояс. В моем случае это GMT, которое требуется для API. Теперь мне просто нужно получить этот результат на Python.
Отвечать
Решением было несоответствие предоставленных часовых поясов. Хотя у меня все еще возникают проблемы со сторонним api, я, по крайней мере, теперь получаю правильное время.
Вероятно, это можно очистить:
from datetime import datetime
import calendar
import time
import pytz
def GenerateTimeStamp(d):
europe = pytz.timezone('Europe/London')
d = europe.localize(d)
tuple = d.utctimetuple()
timestamp = int(time.mktime(tuple))
return timestamp
Просто укажите дату и время:
GenerateTimeStamp(datetime(2013, 8, 10))
or
GenerateTimeStamp(datetime.utcnow())
В качестве примечания: если вы пробуете это и хотите установить pytz 1 с помощью pip, вы Я могу получить его, используя предварительный тег 2:
pip install --pre pytz