python - pickle 后日期时间戳是否更新?

标签 python pickle

我正在使用 datetime.date.today().day 创建时间戳。在代码的后面,这个应该与另一个(当前)时间戳进行比较,但只是在日期级别:“如果当前日期不是前一个时间戳的日期,则执行操作”。

为此,我使用 pickle 保存了第一个时间戳。现在我想知道,如果加载日期不是“倾销”日期,日期时间对象是否会在 pickle.load 之后自动更新。毕竟,该函数被命名为“今天”...我希望这不是一个愚蠢的问题,我设法正确解释了我的问题。

最佳答案

方法 datetime.datetime.today() 创建 当前时刻的新 datetime.datetime 对象。对象本身不知道它是如何创建的,即函数和函数的意图都不知道。它只知道它是什么时候创建的,这就是将要存储的内容。

如果您查看该函数的文档(例如通过 help(datetime.datetime.today),它会提供以下信息:

Current date or datetime: same as self.__class__.fromtimestamp(time.time())

现在,time.time() 提供当前时间戳,例如1468585949.653488。这是一个普通数字(floatint),一旦创建 就是常量。然后将该数字简单地馈送到 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] 排除时区差异等。

关于python - pickle 后日期时间戳是否更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38395920/

相关文章:

python - Python 3.7错误: Unsupported Pickle Protocol 5

Python 多处理模块 : calling an instance method within a process

python - 如何恢复损坏的、部分 pickle 的文件?

python - 将颜色条添加到现有轴

python - Postgresql:将本地数据库迁移到 PythonAnywhere 数据库

python - 当父进程结束时,由 subprocess.Popen 调用的进程未正确关闭

python - 在 Python 3 中打开 Python 2 Pickle 文件时出现 TypeError : a bytes-like object is required, 而不是 'str'

python - 从 pickle 加载的 HMM 看起来未经训练

python - 当另一行缺少数据时删除或 drop_duplicates 与 NaN 匹配所有数据

python - 如何选择 NumPy 数组中的所有非黑色像素?