在iOS和我的Python GAE后端之间进行同步时,我想利用时间戳来获得干净的解决方案。如何将整数时间戳转换回UTC日期时间?
根据我的研究,这是创造最好的方式reliable timestamp:
calendar.timegm((datetime.datetime.now()).utctimetuple())
在那里我得到这样一个整数:1382375236
当在后台,我想以另外保存last_updated
datetime从时间戳派生而来。这是人类可读的,适合快速检查。
def before_put(self):
self.last_updated = datetime.utcfromtimestamp(self.timestamp)
但是这个失败的错误:
TypeError: a float is required
什么是准确的方式解决这个的最好方法?
UPDATE:
我也发现了这个建议here: 该解决方案将通过1e3
来划分它。
在我的情况下,这给了我一个奇怪的日期:
>>> datetime.datetime.utcfromtimestamp(1382375236/1e3)
datetime.datetime(1970, 1, 16, 23, 59, 35, 236000)
更新2
整个模型是:
class Record(ndb.Model):
user = ndb.KeyProperty(kind=User)
record_date = ndb.DateProperty(required=True)
rating = ndb.IntegerProperty(required=True)
notes = ndb.TextProperty()
last_updated = ndb.DateTimeProperty(required=True)
timestamp = ndb.IntegerProperty(required=True)
def __repr__(self):
return '<record_date %r>' % self.record_date
def before_put(self):
self.last_updated = datetime.utcfromtimestamp(self.timestamp)
def after_put(self):
pass
def put(self, **kwargs):
self.before_put()
super(Record, self).put(**kwargs)
self.after_put()
有问题将其保存在数据存储?你能否显示你正试图保存这个值的模型? – Lipis
当然可以。它现在更新。谢谢 – Houman
是否有什么特别的原因,你没有在DateTimeProperty上使用'auto_now = True'。第二,为什么要重写放置,你有前置和后置放置钩让你自己做的重写put()。见挂钩方法https://developers.google.com/appengine/docs/python/ndb/modelclass#Model__pre_put_hook –