Google App Engine中的有效日期时间对象
在这个模型中
class Rep(db.Model):
mAUTHOR = db.UserProperty(auto_current_user=True)
mUNIQUE = db.StringProperty()
mCOUNT = db.IntegerProperty()
mDATE = db.DateTimeProperty(auto_now=True)
mDATE0 = db.DateTimeProperty(auto_now_add=True)
mWEIGHT = db.IntegerProperty()
我想要做的是:
mWEIGHT = mCOUNT / mDATE0
在这个循环里
for i in range(len(UNIQUES)):
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
if C_RESULT:
rep=C_RESULT[0]
rep.mCOUNT+=COUNTS[i]
# how to convert mDATE0 to integer so that I can divide:
# rep.mWEIGHT = rep.mCOUNT / rep.mDATE0
rep.put()
else:
C = COUNTS[i]
S = UNIQUES[i]
write_to_db(S, C)
我在其他几个论坛也问过同样的问题,得到了很多好的建议,但我还是搞不定这段代码,因为我对(对象、实例、datetime.datetime、秒、第二……等等)感到困惑。例如,我原以为
mWEIGHT = mCOUNT / rep.mDATE0.second
可以把mDATE0转换成秒;但实际上并没有,它只是取了2010-11-12 18:57:27.338000
这个时间的秒部分,也就是27。
而且
mWEIGHT = mCOUNT / mDATE0.date
会出现类型不匹配的错误信息。
我还试过
rep.mWEIGHT = rep.mCOUNT / rep.mDATE0.toordinal()
这个方法会得到一个像734088
这样的数字,但所有的项目都得到了相同的数字。
你也可以看看我在同一主题上的之前的问题。
谢谢你的帮助。
编辑3
这个方法有效,谢谢!
if C_RESULT:
rep = C_RESULT[0]
rep.mCOUNT+=COUNTS[i]
utc_tuple = rep.mDATE0.utctimetuple()
# this is actually float not integer
mDATE0_integer = time.mktime(utc_tuple)
mDATE0_day = mDATE0_integer / 86400
rep.mWEIGHT = float(rep.mCOUNT / mDATE0_day)
rep.put()
编辑2
@Constantin:我意识到数字需要是浮点数:
>>> mCOUNT = 35
>>> div = mCOUNT / mDATE0
>>> div
0
>>> div = float(mCOUNT) / float(mDATE0)
>>> div
2.7140704010987625e-08
>>>
我不太确定怎么把这个加到脚本里。有什么建议吗?
编辑
@Constantin:
对于这个项目
C_RESULT[0] = "new item"
这是我得到的结果。
new item:
rep: <__main__.Rep object at 0x052186D0>
mDATE0_integer: 1289575981
rep.mCOUNT: 35
rep.mWEIGHT: 0
所以
mDATE0_integer = int(time.mktime(rep.mDATE0.utctimetuple()))
这个方法有效,并给出了整数1289575981
,但这个除法
rep.mWEIGHT = rep.mCOUNT / mDATE0_integer
结果是0。有什么建议吗?