因此,根據我在問題中得到的結果,您只需要存儲間隔並將其從數據庫中取出以再次使用它?但是你想了解它是如何存儲的?
關於存儲:Unix時間戳比DateTimes更容易。假設你想存儲timedelta(1)
,即一天的增量。存儲在數據庫中的是自「紀元」以來的時間,即Unix時間戳中的第二個「0」和日期:1970-01-01 00:00:00
(這是Unix時間戳開始計算秒數的地方)。如果您不知道曆元或時間戳,請閱讀Wikipedia on Unix time。
所以我們想存儲一天的差異?文件聲稱它存儲「自時代以來的時間」。我們剛剛瞭解到「時代」是「秒0」,因此一天之後將是每分鐘60秒,每小時60分鐘,每天24小時:60 * 60 * 24 = 86400
。因此以整數形式存儲,這很容易理解:如果在數據庫中找到值86400
,則表示1 day, 0 hours, 0 minutes, 0 seconds
。
現實有點不同:它不存儲整數,而是存儲一個DateTime
對象。從這個角度講,這個時代是1970-01-01 00:00:00
。那麼這個時代以來的一天的增量是多少?這很容易:它是1970-01-02 00:00:00
。你可以看到,這是一天之後。
一小時後? 1970-01-01 01:00:00
。
兩天四小時30秒?:1970-01-03 04:00:30
。
而且你甚至可以自己做:
epoch = datetime.utcfromtimestamp(0)
delta = timedelta(1)
one_day = datetime.utcfromtimestamp(86400)
print "Date to be stored in database:", epoch + delta
print "Timedelta from date:", one_day - epoch
正如你所看到的,計算是容易的,這是所有在幕後完成。看看這個full example:
interval = IntervalItem(interval=delta)
session.add(interval)
i = session.query(IntervalItem).first()
print "Timedelta from database:", i.interval
你可以看到它是從上面的例子沒有什麼不同,除了它通過數據庫。要記住這樣做的唯一事情,就是這樣一個字條:
Note that the Interval type does not currently provide date arithmetic operations
on platforms which do not support interval types natively.
這意味着你要小心你如何使用它,例如除了在查詢可能不是一個好主意,但你應該只玩與它在一起。