我使用datetime.date.today()。創建時間戳。在代碼的後面,這一個應該與另一個(當前)時間戳進行比較,但只是在日期級別上:「如果當前日期不是前一個時間戳的日期,則執行一些操作」。酸洗後日期時間戳是否更新?
爲此,我使用pickle保存第一個時間戳。現在我想知道,如果日期時間對象將在pickle.load後自動更新,如果加載日期不是「傾銷」日期。畢竟,這個函數被命名爲「今天」...我希望,這不是一個愚蠢的問題,我設法正確地解釋我的問題。
我使用datetime.date.today()。創建時間戳。在代碼的後面,這一個應該與另一個(當前)時間戳進行比較,但只是在日期級別上:「如果當前日期不是前一個時間戳的日期,則執行一些操作」。酸洗後日期時間戳是否更新?
爲此,我使用pickle保存第一個時間戳。現在我想知道,如果日期時間對象將在pickle.load後自動更新,如果加載日期不是「傾銷」日期。畢竟,這個函數被命名爲「今天」...我希望,這不是一個愚蠢的問題,我設法正確地解釋我的問題。
方法datetime.datetime.today()
創建新的datetime.datetime
當前對象的當前時刻。對象本身並不知道它是如何創建的,即不是函數和函數的意圖。它只知道它是什麼時候被創建的,而這將被存儲。
如果你看一下函數的文檔(通過help(datetime.datetime.today
EG),它提供了這樣:
當前日期或日期時間:同
self.__class__.fromtimestamp(time.time())
現在,time.time()
提供當前時間戳,例如1468585949.653488
。這是一個普通數字(float
或int
),它是恆定的一旦創建。這個號碼然後簡單地送到datetime.datetime.fromtimestamp
。對於任何給定的時間戳,這總會給你相同的datetime
[1]。
In [12]: datetime.datetime.fromtimestamp(1468585949.653488)
Out[12]: datetime.datetime(2016, 7, 15, 14, 32, 29, 653487)
如果轉儲此對象,則會得到常規的datetime.datetime
對象。這只是普通類datetime.datetime
及其數據,沒有功能或方法參考,如datetime.datetime.today
。
In [3]: print(pickle.dumps(datetime.datetime.fromtimestamp(1468585949.653488),protocol=0))
# cdatetime # class datetime.\
# datetime # datetime
# p0 # push last object (datetime.datetime) to stack as p0
# (S'\x07\xe0\x07\x0f\x0e \x1d\t\xf8\xb0' # group '(' start, string 'S' from binary ('\x07...')
# p1 # push last object (string) to stack as p1
# tp2 # create tuple from last stack group, push to stack as p2
# Rp3 # call p0(*p2)
# . # done
那麼,這塊垃圾做什麼?它查找對象datetime.datetime
爲p0
,將字符串'\x07\xe0\x07\x0f\x0e \x1d\t\xf8\xb0'
存儲爲p1
,創建元組p2 = tuple((p1,))
,然後調用p0(*p2)
。
或換句話說,返回datetime.datetime('\x07\xe0\x07\x0f\x0e \x1d\t\xf8\xb0')
。請注意,datetime.datetime
的參數是常量字符串。這將永遠給你原來的日期時間:
In [30]: datetime.datetime('\x07\xe0\x07\x0f\x0e \x1d\t\xf8\xb0')
Out[30]: datetime.datetime(2016, 7, 15, 14, 32, 29, 653488)
[1]時區等霸菱差異
它不會加載後自動進行更新。爲了證明它,看看這個小例子:
import pickle
import datetime
today1 = datetime.datetime.today()
pickle.dump(today1, open('today','wb'))
sleep(5)
today2 = pickle.load(open('today','r'))
# today1 => datetime.datetime(2016, 7, 15, 18, 6, 6, 578041)
# today2 => datetime.datetime(2016, 7, 15, 18, 6, 6, 578041)
你可以看到,即使是5秒的延遲之後,就在日期時間的屬性(年,月,日,小時,秒...等)沒有變化對象:today1
和today2
希望它可以幫助:)
不,時間戳不autoupdated。我覺得你比較時間是錯誤的。 。如果您可以使用代碼片段提供詳細信息,那將會更有幫助。 –
嘗試'type(datetime.date。今日()。天)'。你會看到它是一個'int'。所以它不知道「今天」的任何內容,它只是一個數字。 – matiasg
一個與問題無關的小問題:爲什麼使用pickle存儲第一個時間戳,如果只使用它「稍後在代碼中」?您的程序是否停止執行,然後在恢復時加載上次的時間戳? – MisterMiyagi