看起来这在其他问题中已经有所涉及,但我仍然对如何实际执行此操作感到困惑。我缺乏经验对此没有多大帮助。
我有两个 DateTimeProperties - StartTime 和 EndTime。我从 EndTime 中减去 StartTime 以获得持续时间。从我之前的问题(感谢所有回答者!)来看,这个操作似乎产生了时间增量。
似乎没有一种简单的方法可以将 timedelta 直接存储在 GAE 数据存储中,所以这意味着我需要将它转换为以毫秒为单位的 int、以秒为单位的 float 或时间。
稍后我还需要对此进行其他计算,例如计算平均值。期间。基于此,int 现在对我来说似乎最有意义。
执行此操作的最佳方法是什么,或者是否有我可以玩的教程?
谢谢!
最佳答案
为了尽可能简单地使用它,有两个步骤:将 timedelta 转换为 int 或 float,并将其存储在数据存储区中。首先,将时间增量转换为微时间:
def timedelta_to_microtime(td):
return td.microseconds + (td.seconds + td.days * 86400) * 1000000
不过,您不必自己进行转换 - 您可以定义自定义数据存储属性,这将允许您将时间增量直接存储到模型中:
class TimeDeltaProperty(db.Property):
def get_value_for_datastore(self, model_instance):
value = self.__get__(model_instance, model_instance.__class__)
if value is not None:
return timedelta_to_microtime(value)
def make_value_from_datastore(self, value):
if value is not None:
return datetime.timedelta(microseconds=value)
现在您可以像使用任何其他属性一样使用此属性:
class MyModel(db.Model):
td = TimeDeltaProperty(required=True)
entity = MyModel(td=datetime.datetime.now()-some_datetime)
key = entity.put()
entity = db.get(key)
print entity.td
关于python - timedelta 转换为时间或 int 并将其存储在 GAE (python) 数据存储中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2413144/