描述星期几的最佳方法是什么?

3 投票
4 回答
528 浏览
提问于 2025-04-16 21:55

我正在计划第一次将数据加载到GAE(谷歌应用引擎)中,想要把事情安排得井井有条。我使用的编程语言是Python。我的问题是关于在应用引擎中存储只读的时间数据。

我有一个电子表格,大约有5万行和30列。

这些数据是历史数据,表格将是只读的。

我想要根据星期几进行很多排序(比如显示七月的周末等等),还有时间(不一定总是带日期,但有时候会带),所以我最初的想法是创建一个额外的行,填入之前计算好的“星期几”。

eg.
date, time, dayofweek, event, geolocation, etc
27-02-2009, 08:20:00, 'Friday' ...

上面显示的日期和时间是从电子表格中提取的。

如果我打算花时间计算“星期几”,我想这应该是个好主意。根据你对GAE的数据存储模型的经验,我应该:

- 只用一个日期时间?(让GAE在未来的排序/请求中计算星期几?)

- 创建一个星期几,但只用一个日期?比如 '2009-02-27 08:10:00'

- 直接把星期几存成一个整数?(在Python中,0代表星期一,没记错的话)

- 把日期存成 '2009-02-27' 吗?

输出将始终是英文,也可能是JSON格式。这是为了一个数据可视化的研究,客户端可能还会做一些额外的时间动画,但我最主要的担心是尽量减少在GAE上做的工作,我承认这可能只是个新手的执念。

4 个回答

1

我同意,你确实需要把日期拆分成对查询有意义的方式。把一些信息放进关键字里是有帮助的,正如之前提到的那样。不过,有时候这并不总是可行的,因为关键字可能会有其他的需求。

还有一种选择,就是根据日期建立一个查询索引,并利用祖先/父母关系。这样你就可以对以日期为导向的实体进行只查询关键字,然后用这些关键字去获取父母信息。

最后,我建议无论你怎么拆分日期,一定要完整地存储日期和时间。这样如果以后出现错误,或者你改变方案时,你会需要这些完整的信息。

1

如果你想要达到最佳的性能,可以在你的键名中加入“年中的天数”和“年份”。

比如我会这样构建键名:analytic:124:2011。

这样的话,获取最近30天的数据就变得很简单了。只需要创建一个列表生成器,它会为最近30天生成一系列的键名。

from datetime import datetime
dof = datetime.now().timetuple()
keys = [db.Key.from_path("Analytic","%i:%i"%(dof-i,2011)) for in in xrange(0,30)]
analytics = db.get(keys)
3

如果你打算根据星期几来查询数据,比如你想选出几个星期五,但不想要相邻的日子,那么你最好把这个信息单独放在一个属性里,这样查询会更高效。

要查询“七月份的星期五”,你有几种选择:

  • 如果没有单独的“星期几”属性,你可能需要为每个有效的星期五做四到五个查询。
  • 如果有单独的“星期几”属性,你就可以在一个查询中同时指定星期几和日期范围。这样的话,你可以用日期范围的过滤条件,但在这个查询中就不能对其他属性使用过滤条件了。
  • 如果有单独的“星期几”和“月份”属性,你就可以在不使用任何过滤条件的情况下完成上面的查询。

撰写回答