python - timedelta 转换为时间或 int 并将其存储在 GAE (python) 数据存储中

标签 python google-app-engine

看起来这在其他问题中已经有所涉及,但我仍然对如何实际执行此操作感到困惑。我缺乏经验对此没有多大帮助。

我有两个 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/

相关文章:

python - 如何删除 CSV 文件中的列?

python - 哪个更灵活? django-registration 或 django-userena

python - Django-Mongoengine : Store extra information in User Object

python - 导入错误 : No module named PBKDF2

java - 为什么统计 GAE 数据存储中 X 个实体的时间会随着实体总数的增加而增加?

javascript - GAE Launcher 中的数据库 ID 号很大?

python - 在 Django 中使用 Google App Engine 队列服务

python - QWebView 欠采样 SVG 渲染

python - ndb.transactional 如何对实体进行分组?

python - 在 Docker 中使用 PYTHONDONTWRITEBYTECODE 有什么缺点吗?