我正在使用datetime.date.today()。day创建一个时间戳。在代码的稍后部分,应将此时间戳记与另一个(当前)时间戳记进行比较,但仅在日期级别进行比较:“如果当前日期不是先前时间戳记的日期,则执行操作”。
为此,我要使用pickle保存第一个时间戳。现在,我想知道,如果pickle.load之后datetime-object是否会自动更新,那么加载日期是否不是“转储”日期。毕竟,该函数被命名为“ today” ...我希望这不是一个愚蠢的问题,我设法正确地解释了我的问题。
该方法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)
。
或者换句话说,datetime.datetime('\x07\xe0\x07\x0f\x0e \x1d\t\xf8\xb0')
被返回。请注意,to的参数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]时区等的差异
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句