【问题标题】:Store a python datetime timestamp so that I can later query all events from that date存储一个 python 日期时间时间戳,以便我以后可以查询该日期的所有事件
【发布时间】:2020-02-14 02:41:36
【问题描述】:

所以我已经阅读了两天来我能找到的每一个文档和 SO 问题,但还没有弄清楚。我遇到的问题似乎很简单,但是我根本无法很好地理解答案,无法将它们组合在一起。

我有一个在 Heroku 上运行的网站。它内置在烧瓶中。 当有人购买时,我的 postgress 数据库中的客户对象带有时间戳,没有时区表。为此我正在使用:

now=datetime.now()

这设置了一个在我的本地机器上测试时很好的时间,但由于我的服务器时间在 UTC 时间上有 7 小时的时间,所以现在关闭了。 我看到的问题是,如果我将时间戳存储为:

now=datetime.utcnow()

存储在数据库中的时间仍将是 UTC 时间,我不明白如何查询今天发生的所有事务。 目前,我使用 >=today 和

【问题讨论】:

    标签: python python-3.x flask flask-sqlalchemy


    【解决方案1】:

    试着把它放在那些:

    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()
    

    【讨论】:

    • 很抱歉,但我仍然不明白这些将如何解决我的问题?当我存储事件时,我需要将时间戳设置为亚利桑那时间,而不是我的服务器所在的本地时间。
    • 在数据库中存储为浮点数,从数据库读取时将其转换为UTC,在您已经是UTC之后转换为所需的tz,否则转换将不准确。
    • 编程中的时间戳通常是基于 UTC 的,您可能想了解更多关于该主题的信息。
    猜你喜欢
    • 2019-05-21
    • 2016-01-11
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    相关资源
    最近更新 更多