Переменная Интерполяция изменяет результат функций Делора

Итак, я только что загрузил около 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)
Другие вопросы по тегам