在日志记录中使用自UNIX纪元以来的秒数作为日期格式

时间:2019-06-30 19:38:52

标签: python logging time epoch

logging.basicConfig的文档说:

  

THISSHOULDBEIGNORED_RESULTAFTERSUBSTITUTIONWORKS<div><ac>another thing</another><p>welcome home to somewhere</p></div>the line keeps going and going</p><p>paragraph</p>-使用time.strftime()接受的指定日期/时间格式。

但是,如果我看看time.strftime()的文档,那里甚至没有提到UNIX Epoch时间戳。


更新:如果我按照strftime(3)的联机帮助页中所述使用datefmt,则它适用于Linux,但不适用于Windows。

%s

产生

import time
time.strftime('%s')

因此,我正在寻找一种独立于平台的方法,以将UNIX Epoch以来的秒数用作日志记录中的日期格式。

2 个答案:

答案 0 :(得分:2)

由于List<Task> changedTasks = originalTaskList .Zip(newTaskList, (o, n) => o.ActiveFlag != n.ActiveFlag ? n : null) .Where(n => n != null).ToList(); 在支持的格式字符串方面的行为与平台有关,因此肯定无法通过asctime来做到这一点。

strftimestrftime()行为”部分的文档中有一个关于此的段落:

  

受支持的全部格式代码集在各个平台上都不同,因为Python调用平台C库的strptime()函数,并且平台版本很常见。要查看平台所支持的全套格式代码,请查阅 strftime(3)文档。

https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior


但是,不管strftime(),您仍然可以在logginng格式字符串中使用自UNIX Epoch以来的秒数。还有一个名为asctime的属性:

  

created-创建LogRecord的时间(由%(created)f返回)。

https://docs.python.org/3/library/logging.html#logrecord-attributes

由于time.time()在Linux和Windows上均可使用,因此您只能在日志记录格式字符串中使用time.time()代替created

答案 1 :(得分:1)

不能使用ANSI C中的strftime()获得Unix纪元格式(毕竟,这是一种输入)。 同样,您无法在Python中将此功能作为跨平台使用。

但是,您可以利用C和Python中非特殊字符都通过strftime()的事实。 因此,您可以使用以下解决方法(虽然很丑陋但很有效):

import time

time.strftime(str(time.time()))

或更准确地说:

time.strftime(str(int(time.time())))

time.strftime(str(int(time.time()))) == time.strftime('%s')
# True