【问题标题】:Python GAE datastore datetime query.filter by dayPython GAE 数据存储日期时间查询。按天过滤
【发布时间】:2015-01-01 12:36:51
【问题描述】:

Python Google App Engine (GAE)

在数据存储中,我在条目中存储了日期时间,它采用 UTC(预期行为)。

问题在于使用 query.filter 来获取另一个时区的特定日期。

示例 GAE 数据存储日期时间条目 (UTC):

  • 2014-11-4 晚上 11 点 UTC
  • 2014 年 11 月 4 日下午 12 点 UTC
  • 2014-11-4 01am UTC

很简单,可以使用 UTC 按日期提取这些条目:

query_date = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
query.filter('DateTimeUTC >=', query_date)
query.filter('DateTimeUTC <', query_date+timedelta(days=1))

或者像这样:

start_date = datetime.strptime('11/04/2014', '%m/%d/%Y')
end_date = datetime.strptime('11/05/2014', '%m/%d/%Y')
query.filter('DateTimeUTC >=', start_date)
query.filter('DateTimeUTC <', end_date)

但是,让我们考虑一个事实,尽管这三个条目是在 2014 年 4 月 11 日根据 UTC 输入的,但原始用户在 PST 中,因此第三个条目实际上是在 2014 年 11 月 3 日,而不是在4 日(世界标准时间凌晨 1 点 = 太平洋标准时间前一天下午 5 点)。

因此,使用此示例代码和数据,让我们想象一组更大的数据,所有数据均由用户在 PST、EST 等中输入,现在您正尝试为每个数据提取特定日期(让我们专注于 PST保持一致 - UTC-8)。

您如何查询.filter 特定时区的天数,而不是使用 UTC 的天数定义?

再次,尝试坚持 PST,以便我们都在同一个页面上。

我正在尝试使用这种格式使事情保持简单和干净,但是如果我在 GAE 上的代码风格在性能方面很慢或者有更好的路线(与此相比通过速度证明),那么我完全赞成它。

【问题讨论】:

  • 我知道更新现有实体会很痛苦,但为什么不将日期时间存储为 PST 而不是 UTC?或者当您构建开始/结束日期时将它们移动 8 以成为 PST?
  • 当你有一个在不同时区(PST、EST 等)有多个人的全球应用程序时不起作用,这有意义吗?
  • 确实如此,在进行搜索时,他们总是来自 PST 还是来自人们所在的地方?如果是当地时间,那么当您进行过滤时,只需从时间中减去时区即可。
  • GAE 仅以 UTC 存储,因此通过在其服务器上存储在 PST 中进行转换,您会遇到转换回来的问题,因为当您说存储在 UTC 环境中的 PST 时间不正确时然后转换为 EST。

标签: python google-app-engine datetime timezone google-cloud-datastore


【解决方案1】:

将您当地一天的开始和结束时间转换为 UTC,然后在这些 UTC 时间之间进行查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2018-05-27
    • 2021-10-30
    • 2020-09-08
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多