Python 在日志记录中使用自UNIX纪元起的秒数作为日期格式
这些文件的内容如下:Python 在日志记录中使用自UNIX纪元起的秒数作为日期格式,python,logging,time,epoch,Python,Logging,Time,Epoch,这些文件的内容如下: datefmt-使用用户接受的指定日期/时间格式 但是,如果我看一下的文档,这里甚至没有提到UNIX Epoch时间戳 更新:如果我使用的是的手册页中所述的%s,则它适用于Linux,但不适用于Windows import time time.strftime('%s') 导致 ValueError: Invalid format string 因此,我正在寻找一种平台无关的方法,在日志记录中使用自UNIX纪元以来的秒数作为日期格式。使用asctime确实不可能做到这
datefmt
-使用用户接受的指定日期/时间格式
但是,如果我看一下的文档,这里甚至没有提到UNIX Epoch时间戳
更新:如果我使用的是的手册页中所述的
%s
,则它适用于Linux,但不适用于Windows
import time
time.strftime('%s')
导致
ValueError: Invalid format string
因此,我正在寻找一种平台无关的方法,在日志记录中使用自UNIX纪元以来的秒数作为日期格式。使用
asctime
确实不可能做到这一点,因为strftime
关于支持的格式字符串的行为取决于平台
文档中的“strftime()
和strftime()
行为”一节中有一段关于这一点的内容:
由于Python调用平台C库的strftime()。要查看您的平台上支持的全套格式代码,请参阅strftime(3)文档
但是,不管asctime
,您仍然可以在日志格式字符串中使用自UNIX纪元以来的秒数。还有另一个名为“创建的<代码>属性”
:
%(已创建)f
-创建日志记录的时间(由Time.Time()返回)
由于time.time()
在Linux和Windows上都能工作,所以您可以使用created
而不是日志格式字符串中的asctime
。在ANSI C中使用strftime()
无法获得Unix epoch格式(毕竟,这是一种输入)。
类似地,在Python中,不能将此功能作为跨平台使用
但是,您可以利用这样一个事实,即在C和Python中,非特殊字符都通过strftime()
。
因此,您可以使用以下解决方法——诚然,这些方法相当丑陋,但非常有效:
导入时间
time.strftime(str(time.time()))
或者更准确地说:
time.strftime(str(int(time.time()))
time.strftime(str(int(time.time()))==time.strftime(“%s”)
#真的
time.time()
以浮点数形式返回自历元以来的时间(以秒为单位)。顺便说一句,在time.strftime('%S')
中使用大写字母S。Python中的函数不支持小写的%S
格式指令(大写的%S
不是您想要的秒数)。如文档中所述:“在某些平台上可能支持其他指令,但只有此处列出的指令具有ANSI C标准化的含义”-我认为这是一种冗长的说法“可能与平台无关”这是因为在内部,无论目标平台是什么,它都是使用C运行时库实现的。如果需要,这种方法允许使用特定于平台的格式,但是如果您想要最大的可移植性,则需要坚持ANSI C标准中的内容。我不是日志记录专家,但如果有什么方法可以实现您想要的功能,我也不会感到惊讶。@finefoot:因为重新实现strftime将非常昂贵,与同一平台上的其他程序不兼容,并且在某些情况下可能表现出与其他程序不同的行为。任何认为%s
应该是C语言的一部分或Windows实现的一部分的人,都可以分别与WG14或Microsoft对话;这样的改变不像看上去那么不可能。