我有一个函数,我调用它为通过 For 循环的事件生成时间戳。
函数和 RAW 时间戳
def atimer ():
timenow = time.time()
return(timenow)
print timenow
1434615010.27858
时间戳看起来像这样"1434615010.27858",这对于 sqlite3 中的数据库使用来说既好又小。当我使用日期时间转换时间戳时,我得到了正确的时间声明(见下文)。
转换
>>> print datetime.datetime.fromtimestamp(1434615010.27858)
2015-06-18 10:10:10.278580
这个极其有效的问题的问题在于,我有大量事件涌入,显示为下面的时间戳打印输出。
2015-06-18 11:36:57.830000
2015-06-18 11:36:57.830000
2015-06-18 11:36:57.830000
2015-06-18 11:36:59.340000
2015-06-18 11:36:59.340000
2015-06-18 11:36:59.340000
2015-06-18 11:37:00.740000
2015-06-18 11:37:00.740000
2015-06-18 11:37:00.740000
2015-06-18 11:37:02.130000
我想将时间戳相互比较,然后只将给定分钟内的第一个时间戳提交到数据库(SQL UPDATE)。
问题>正则表达式是我在这里唯一的选择,还是我可以降低此时间戳本身以不给我如此详细的时间戳吗?
信息:我选择这个时间戳的主要原因是它很小,占用的数据库空间更少,尤其是当您使用 1000 个时间戳时。
下面是我试图获得的输出...
2015-06-18 11:36
2015-06-18 11:37
提前致谢
为什么不把它们放进一个字典里,这样你每分钟只会得到一个条目:
times = [
'2015-06-18 11:36:57.830000',
'2015-06-18 11:36:57.830000',
'2015-06-18 11:36:59.340000',
'2015-06-18 11:36:59.340000',
]
time_dict = {}
for time in times:
time_dict[(time.split('.'))[0][:-3]] = 1
print(time_dict.keys())
更好的是,您可以在翻译日期之前创建字典。这样,您只需为每个相同的条目进行一次转换:
times = [
'1434615010.27858',
'1434615010.27858',
]
time_dict = {}
for time in times:
time_dict[time] = 1
for time in time_dict.keys():
date = datetime.fromtimestamp(float(time))
print((str(date).split('.')[0])[:-3])
您可以从每个日期中删除秒和微秒以获得所需的输出:
import datetime
aDate = datetime.datetime.fromtimestamp(1434615010.27858)
print aDate
aDate -= datetime.timedelta(seconds=aDate.second, microseconds=aDate.microsecond)
print aDate
这将打印:
2015-06-18 05:10:10.278580
2015-06-18 05:10:00
一个简单的解决方案是记住你最后打印的东西是什么,只有在新的不同时才再次打印出来:
lastTime = None
while True:
thisTime = datetime.datetime.fromtimestamp(atimer()).strftime("%Y-%m-%d %H:%M")
if thisTime != lastTime:
print thisTime
lastTime = thisTime