我正在使用datetime.date.today()。day创建时间戳。稍后在代码中,这个应该与另一个(当前)时间戳进行比较,但只是在日级别:“如果当前的日期不是前一个时间戳的那一天,那就去做吧。”
为此,我正在使用pickle保存第一个时间戳。现在我想知道,如果datele-object将在pickle.load之后自动更新,如果加载日期不是“转储”日期。毕竟,该功能被命名为“今天”...我希望,这不是一个愚蠢的问题,我设法正确地解释了我的问题。
答案 0 :(得分:3)
方法datetime.datetime.today()
创建当前时刻的新datetime.datetime
对象。对象本身并不知道它是如何创建的,即功能和功能的意图。它只知道它何时被创建,这就是将要存储的内容。
如果您查看该功能的文档(例如通过help(datetime.datetime.today
),它会提供以下信息:
当前日期或日期时间:与
相同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)
。< / p>
或者换句话说,返回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]在时区等方面的差异
答案 1 :(得分:2)
加载后它不会自动更新。要演示它,请查看以下小例子:
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
希望有所帮助:)