0

我目前正在开展一个项目,在该项目中我必须在查询时比较两个日期时间对象。我的 GQL 查询是:

qry = ndb.gql("SELECT * from Task WHERE ANCESTOR IS :1 AND due >= :2 ORDER BY due ASC",
                          ndb.Key(urlsafe=group_key), datetime.now())

到期字段是一个日期时间对象。为了保存它,我得到了一个 UTC 字符串作为发布数据并使用

frmt = "%a, %d %b %Y %H:%M:%S %Z"
first_event = datetime.strptime(utc_date_string, frmt)

我现在想要做的是让前 5 个实体比现在due更老。(基本上接下来发生的 5 个事件)。但是,我的查询仅返回从第二天开始发生的下一个事件,并从今天跳过这些事件。

我已经玩过gae-pytz了一点,但是由于我是在编程中处理日期的新手,所以到目前为止我无法解决这个问题。

编辑: 为了观察到底发生了什么,我在同一天三个小时后创建了一个任务实体。我保存了 UTC 字符串Sun, 03 Nov 2013 07:10:00 GMT,当转换回我的本地时间时它是正确的。EDIT2:似乎客户端的 AM/PM 转换不起作用。

然后我更改了查询以获取所有实体而不比较日期,然后记录当前日期时间和我的实体的日期时间:

qry = ndb.gql("SELECT * from Task WHERE ANCESTOR IS :1 ORDER BY due ASC",
                          ndb.Key(urlsafe=group_key))

登录时task.due (logging.error(task.due))我得到:

2013-11-03 07:10:00

登录时datetime.utcnow() (logging.error(datetime.utcnow())我得到:

2013-11-03 16:14:30.736933

所以看起来我的task.due字段以 12 小时格式保存,而datetime.utcnow以 24 小时格式返回时间。

我还没有找到我需要比较的东西,但至少现在我知道要研究什么了。

4

0 回答 0