在变量中保存日期和时间
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
我想在创建 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