我使用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