Python语言中的时间和日期

时间:2012-03-22 18:40:39

标签: python date time

我有日志文件

Thu Mar 22 21:14:36 2012; TCP;
Thu Mar 22 21:15:15 2012; TCP;
Thu Mar 22 21:16:23 2012; TCP;
Thu Mar 22 21:17:51 2012; TCP;
Thu Mar 22 21:18:45 2012; TCP;

我需要在最后三分钟获取日志,脚本必须是Python 我试着使用datetime和slice函数。

import datetime
x=datetime.datetime.now()
print x #result 2012-03-22 21:19:09.918804

但是当我剪切日期并只留下时间时,系统会生成错误

a=x[11:20]

... TypeError:'datetime.datetime'对象是unsubscriptable ... 我知道算法应该运行良好:当前时间,需要三分钟,但我没有任何想法......而是缺乏知识

2 个答案:

答案 0 :(得分:2)

当你调用datetime.datetime.now()时,python返回一个datetime对象,而不是一个字符串。这就是为什么你不能直接从它切片。当您调用print x时,python会在内部调用str(x)以您看到的方式对其进行格式化。所以,您需要a = str(x)[11:20]

但是,更好的解决方案是使用datetime.strftime

作为来自datetime.strftime的segue,如果您想从预先存在的日志文件中获取日期时间对象(为了检查时间是否在过去3分钟内),您可以使用{{3像这样:datetime.strptime(line.split(';',1)[0],"%a %b %H:%M:%S %Y)

答案 1 :(得分:2)

datetime.datetime个对象不支持切片。我认为你要做的是str(x)[11:20]:也就是说,将x转换为字符串(这是print x显示的内容)并获取其中的11:20索引。 / p>

最好使用strftimex.strftime("%H:%M:%S")

但是:一旦你有了这个字符串,你就需要进行某种比较,而我并不完全确定你是怎么做的。您可能需要向另一个方向前进:

import datetime
import sys

cutoff = datetime.datetime.now() - datetime.timedelta(minutes=3)
line_format = "%a %b %d %H:%M:%S %Y; TCP;"

lines = iter(sys.stdin) # or iter(f) for a file object f

# skip all the lines before three minutes ago
for line in lines:
    logtime = datetime.datetime.strptime(line.strip(), line_format)
    if logtime >= cutoff:
        print line
        break

# print out the rest of the lines
for line in lines:
    print line

这可能会变得更加漂亮,但我认为这样做会更好。如果strptime格式不完全正确,或者行的实际内容不是"TCP;",则可能需要执行更多字符串处理。