在变量中保存日期和时间

时间:2018-05-24 15:57:01

标签: python python-3.x class python-datetime

我想在变量中保存"具体"创建一个实例的时刻,我怎么能在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" 在我第一次创建实例(这是我想要的)时没有记录并保持其值,正在获得每次我称之为新值。

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

问候。

2 个答案:

答案 0 :(得分:0)

每次创建类实例时都会记录时间

每次运行脚本时更新时间的原因是您要通过以下两行创建新实例:

my1Ant = Ants()
my2Ant = Ants()

如果您之后仅访问属性,而不创建新的类实例,则会发现时间已修复。

答案 1 :(得分:0)

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

解决此问题以确保您有独特时间的一种方法是等待时间“打勾”:

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

在我的系统上花了大约15ms来获得新的时间值。

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

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