Python timedate匹配

时间:2015-06-18 11:18:28

标签: python regex sqlite datetime

我有一个我调用的函数,它在通过For循环传递的事件上生成时间戳。

功能和RAW时间戳

def atimer ():
        timenow = time.time()
        return(timenow)

print timenow
1434615010.27858

时间戳看起来像这样" 1434615010.27858",这对于sqlite3中的数据库使用来说很不错。当我使用datetime转换时间戳时,我会得到一个适当的时间陈述(见下文)..

转换

>>> 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)。

问题> Regex是我唯一的选择吗?或者我可以将此时间戳调整为不给我这么详细的时间戳吗?

信息:我选择此时间戳的主要原因是它很小并占用了数据库中较少的空间,特别是当您使用其中的1000个时。

以下是我试图获得的输出......

2015-06-18 11:36
2015-06-18 11:37

提前致谢

3 个答案:

答案 0 :(得分:1)

为什么不把它们放入dict,这样你每分钟只能输入一个条目:

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])

答案 1 :(得分:1)

您可以从每个日期删除秒和微秒以获得所需的输出:

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 

答案 2 :(得分:1)

一个简单的解决方案是记住你打印的最后一件事,如果新的不同,只能打印出来:

lastTime = None
while True:
    thisTime = datetime.datetime.fromtimestamp(atimer()).strftime("%Y-%m-%d %H:%M")
    if thisTime != lastTime:
        print thisTime
        lastTime = thisTime