DateProperty()中的日期错误通过ndb保存

时间:2017-03-03 20:20:09

标签: google-app-engine

GAE中保存日期的结果很奇怪(带有ndb库的Python)。 来自Web表单的入站字符串是%a%m /%d /%y格式化(Fri 3/3/17)。 用datetime.strptime解析,以获取日期值。 当它保存在DateProperty()字段中时,该值始终是前一天,太平洋标准时间16:00:00.000。

        postDate = datetime.datetime.strptime(self.request.get('date-'+
            hashed_id),'%a %m/%d/%y')
        logging.info('postDate as Date: %s',postDate)
        postDateStr = datetime.datetime.strftime(postDate,'%D')
        logging.info('postDateStr: %s',postDateStr)
        thisPost = ScheduledPost(id = postID,
            ...
            postDate = postDate,
            postDateStr = postDateStr
            )

记录结果:

    postDate as Date: 2017-03-03 00:00:00
    postDateStr: 03/03/17
到目前为止这么好,对吗?但在数据存储区界面中,该记录显示:

    PostDate: 2017-03-02 (16:00:00:000 PST)
    PostDateStr:  03/03/17

糟糕。

工作站位于太平洋时间 - 但暂时搁置 - 日期查询似乎确认日期错误。假设今天是3/3/17 -

  today = dt.datetime.now()
  ScheduledPost.query(ScheduledPost.postDate == today).fetch()

没有记录返回。

将日期保存为字符串,并将日期查询为字符串,是此项目的可行解决方法。只是觉得它值得发帖 - 有人见过这个吗?建议?

1 个答案:

答案 0 :(得分:0)

您在appengine上生成的日期时间是UTC,它会被存储为该日期时间,没有时区信息。 当您查看它时,它会被转换为太平洋时间。

您正在执行的查询不正确:您正在生成datetime,而不是date,因此您与之比较的时间将会有所不同