Python 时间日期匹配



我有一个函数,我调用它为通过 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

相关内容

  • 没有找到相关文章

最新更新