Сохраните отметку времени python datetime, чтобы позже я мог запрашивать все события с этой даты - PullRequest
0 голосов
/ 14 февраля 2020

Итак, я перечитывал каждый вопрос c и ТАК вопрос, который я мог найти в течение двух дней и не понял его. Возникающая у меня проблема кажется простой, однако я просто не могу понять ответы достаточно хорошо, чтобы собрать их вместе.

У меня есть сайт, который я создал и который работает на Heroku. Он построен в flask. Когда кто-то совершает покупку, объект клиента в моей базе данных postgress помечается меткой времени без таблицы часовых поясов. для этого я использую:

now=datetime.now()

Устанавливает время, которое было неплохо при тестировании на моей локальной машине, но сейчас отключено из-за того, что мое серверное время было 7 часов по времени UT C. Проблема, которую я вижу, заключается в том, что если я сохраню метку времени как:

now=datetime.utcnow()

Время, сохраненное в БД, будет по-прежнему в UT C, и я не понимаю, как я мог бы запрашивать все транзакции, которые произошли Cегодня. В настоящее время я использую фильтр, который> = сегодня и <= завтра. Поэтому, когда отметка времени в UT C время, все транзакции после 18:00 сохраняются до следующей даты </p>

1 Ответ

0 голосов
/ 14 февраля 2020

Попробуйте с этим смириться:

from datetime import datetime

import pytz
import tzlocal


def get_stamp()->float:
    return datetime.timestamp(datetime.now())


def stamp_to_utc(stamp:float)->datetime:
    naive_local = datetime.fromtimestamp(stamp) 
    local_tz = pytz.timezone(tzlocal.get_localzone().zone)
    return local_tz.localize(naive_local).astimezone(pytz.utc)

def utc_to_tz(utc_dt, tz_name)->datetime:
    return utc_dt.astimezone(pytz.timezone(tz_name))

def main():
    stamp = get_stamp()  # store this in db
    stamp_dt_utc = stamp_to_utc(stamp)
    print(stamp_dt_utc)
    stamp_dt_arizona = utc_to_tz(stamp_dt_utc, "US/Arizona")
    print(stamp_dt_arizona)


if __name__ == "__main__":
    main()
...