在变量中保存日期和时间

Saving date and time in a variable

我想在创建 class 实例的 "specific" 时刻保存在一个变量中,我如何在 Python 3?请查看以下代码片段:

class Ants(object):
    """Workers"""
    ID = 1
    def __init__(self):
        import datetime
        self.borningTime = datetime.datetime.now()
        self.ID = Ants.ID
        Ants.ID += 1

    def get_ID(self):
        return "Ant ID:" + str(self.ID).zfill(5)

    def get_borningTime(self):
        return self.borningTime.strftime("%Y-%m-%d  %X")

my1Ant = Ants()
my2Ant = Ants()

print(my1Ant.get_ID(), my1Ant.get_borningTime())
print(my2Ant.get_ID(), my2Ant.get_borningTime())

当我运行这个时,输出是:

Ant ID:00001 2018-05-24  17:42:45
Ant ID:00002 2018-05-24  17:42:45

当我再次 运行 时:

Ant ID:00001 2018-05-24  17:43:05
Ant ID:00002 2018-05-24  17:43:05

这意味着 "self.borningTime" 没有记录并在我第一次创建实例时保持它的值(这是我想要的),正在获取每次我调用它都是一个新值。

我怎样才能做我想做的事?我的代码中缺少什么?提前致谢。

此致。

每次创建class实例时记录时间

每次您 运行 您的脚本更新时间的原因是您正在通过这两行创建新实例:

my1Ant = Ants()
my2Ant = Ants()

如果您随后 仅访问属性 ,而不创建新的 class 实例,您会发现时间是固定的。

您的实例是在同一秒内创建的。在它们之间放一个 time.sleep(1) ,你会看到时间的变化。您也可以使用 %X.%f 来打印时间的微秒,但时钟的分辨率可能仍会使用相同的戳记创建它们。

解决此问题以确保您拥有唯一时间的一种方法是等待时间 "tick":

import time

class Ants(object):
    """Workers"""
    ID = 1
    def __init__(self):
        import datetime
        self.borningTime = datetime.datetime.now()

        # Wait for the time to change
        while datetime.datetime.now() == self.borningTime:
            pass

        self.ID = Ants.ID
        Ants.ID += 1

    def get_ID(self):
        return "Ant ID:" + str(self.ID).zfill(5)

    def get_borningTime(self):
        return self.borningTime.strftime("%Y-%m-%d  %X.%f") # Add microseconds.

my1Ant = Ants()
my2Ant = Ants()

print(my1Ant.get_ID(), my1Ant.get_borningTime())
print(my2Ant.get_ID(), my2Ant.get_borningTime())

输出:

Ant ID:00001 2018-05-24  09:10:41.085253
Ant ID:00002 2018-05-24  09:10:41.100867

在我的系统上,大约需要 15 毫秒才能获得新的时间值。

如果您不需要 date/time 值,time.perf_counter() 的精度要高得多,但与特定日期和时间无关。您只能比较两个读数之间的差异。在我的系统上,它每滴答不到一微秒,但你仍然可以足够快地调用它而不是滴答:

>>> time.perf_counter() - time.perf_counter()
0.0
>>> time.perf_counter() - time.perf_counter()
-3.775817631890277e-07