Переменная Интерполяция изменяет результат функций Делора
Итак, я только что загрузил около 26 000 заметок через эту конечную точку HubSpot, и я заметил, что куча загруженных заметок имеют очень неправильные метки времени (например, вместо того, чтобы быть датированными или обновленными, они улетели далеко в будущее).
Я проследил проблему до части моего кода, которая использует модуль Delorean, чтобы упростить анализ и преобразование времени в метки времени эпохи. Проблема заключается в том, что, когда я использую переменную интерполяцию через .format()
функция - кажется, что-то что-то меняет.
Пример 1 - Нет интерполяции.
def ref_date_epoch():
parseDate = parse("29/04/2014 00:00:00 -0700")
getEpoch = parseDate.epoch
shiftEpoch = epoch(getEpoch).shift("US/Eastern")
convertEpoch = shiftEpoch.epoch
testing = int(convertEpoch)
return "{testing}000".format(testing=testing)
print(ref_date_epoch())
sys.exit()
Приведенный выше пример возвращает 1398754800000
как отметка времени эпохи, которая преобразуется в правильную дату - 29/04/2014
,
Пример 2 - С интерполяцией.
def ref_date_epoch(datestr):
if len(datestr) > 0:
parseDate = parse("{csvDate} 00:00:00 -0700".format(csvDate=datestr))
getEpoch = parseDate.epoch
shiftEpoch = epoch(getEpoch).shift("US/Eastern")
convertEpoch = shiftEpoch.epoch
testing = int(convertEpoch)
return "{testing}000".format(testing=testing)
else:
None
print(ref_date_epoch(row[2]))
sys.exit()
На этот раз приведенный выше пример возвращает 1597302000000
как отметка времени эпохи, которая действительно очень неправильна, 13/08/2020
, Чтобы разработать, datestr
аргумент принимает список row[2]
который ссылается на индекс строки в CSV, который содержит дату.
Пример 3. Без .format()
функция:
def ref_date_epoch(datestr):
if len(datestr) > 0:
parseDate = parse(datestr)
getEpoch = parseDate.epoch
shiftEpoch = epoch(getEpoch).shift("US/Eastern")
convertEpoch = shiftEpoch.epoch
testing = int(convertEpoch)
return "{testing}000".format(testing=testing)
else:
None
print(ref_date_epoch(row[2]))
sys.exit()
Это все еще возвращается 1597276800000
, Кажется, что простой акт косвенной ссылки на дату, кажется, меняет время. Что дает?
Сказав все это - если нет способа заставить Делореана работать таким образом, знает ли кто-нибудь о способе преобразования строки даты в метку времени с миллисекундами?
Изменить: Я также забыл упомянуть, что многие заметки были также правильными - повлияет ли компьютер, на котором я запускаю сценарий, на создание метки времени эпохи?
1 ответ
Неважно, похоже, что это была смесь плохо отформатированного CSV (используя dd/mm/yy
вместо dd/mm/yyyy
и запутанный код. Я сейчас использую это, и, кажется, работает:
def ref_date_epoch():
parseDate = parse(row[2])
getEpoch = parseDate.epoch
shiftEpoch = epoch(getEpoch).shift("US/Eastern")
convertEpoch = shiftEpoch.epoch
testing = int(convertEpoch)
return "{testing}000".format(testing=testing)