查询一天的时间区域



我从表中有一个UTC数据列表。我想在a local 时区获取独特的日期,并为每个日期获得条目计数 - local timezone。

我敢肯定我已经解决了这个问题,但是我是Python&Sqlalchemy,更不用说日期&时代&时区。

我使用default = utcnow((的列将我的时间戳存储在UTC中...这很棒:2019-07-05 06:19:19:59.920630

我什至可以根据需要在浏览器的当前时区(在应用程序的其他部分(中显示时间戳。

但是,我正在尝试根据时区运行 sqlalchemy查询,以获取该用户本地日的条目。

2019-07-05 06:19:59.920630可以使用我的UTC_TO_TO_LOCAL HERPER函数转换为2019-07-07-04 23:19:59.920630 ...因此,我需要查询才能在我的查询中包含该datetime输入" 2019年7月4日"的记录

所以我正在运行一个sqlalchemy查询,以获取不同日期的列表

>>>uniquedays=db.session.query(func.distinct(func.DATE(TableClass.timestamp))).all()

,但我只是意识到这是返回的日期列表,这些日期可能没有用户的语言环境记录...在我的示例中,7月5日没有任何我的时区的条目独立的。

所以我也可以像这样返回数据元素:

>>>datetimelist = db.session.query(TableClass.timestamp).all()

,但是现在我刚刚有了DateTime(我想(元组的列表:

>>>datetime
[(datetime.datetime(2019, 6, 30, 21, 8, 11, 354018),), (datetime.datetime(2019, 6, 30, 21, 21, 58, 158467),), (datetime.datetime(2019, 6, 30, 23, 39, 8, 310248),)....................

我正在使用它将UTC DateTime转换为本地时间:

def utc_to_local(utc_dt):
    return utc_dt.replace(tzinfo=timezone.utc).astimezone(tz=None)

我现在正在使用SQLite,但打算切换到MySQL数据库进行生产。

理想情况下,这将在DB级别完成。在mysql中,它看起来像这样:

user_tz = 'PST'
uniquedays = db.session.query(func.distinct(func.DATE(
                 func.convert_tz(TableClass.timestamp, 'UTC', user_tz)))).all()

不幸的是,但是,sqlite不支持完全可忽略的时区转换。因此,在切换之前,您必须在Python中进行此操作。希望您没有数百万的行?

import arrow
from collections import Counter
datetimelist = db.session.query(TableClass.timestamp).all()
dates = [arrow.get(dt[0]).to('US/Pacific').date() for dt in datetimelist]
counter = Counter(dates)

另一种方法是使用Sqlalchemy的混合属性,但是如果您不久以后要切换到真实的DB,这可能不值得。

相关内容

  • 没有找到相关文章

最新更新