在研究转换时间戳的不同方法时,例如
2015-09-08 11:07:35
到
1441703255
我发现很多很常见的解决方案使用例如
date +%s --date "2015-09-08 11:07:35"
awk、perl 或类似的解决方案。
然而SE转换答案似乎用于printf
“较新”的 bash 版本上的转换。
由于这是在有一些限制的脚本中使用,所以我不必依赖date
它,而是尝试一种可能更快的方法。到目前为止我的相关尝试:
printf '%(%s)2015-09-08 11:07:35'
bash: printf: warning: `2': invalid time format specification
printf '%(%s)T' "2015-09-08 11:07:35"
bash: printf: 2015-09-08 11:07:35: invalid number
看来我无法正确使用,printf
因为我缺少描述日期格式字符串的确切手册。联机帮助页并 info coreutils 'printf invocation'
没有帮助我解决这个问题。
bash 版本是
bash --version
GNU bash, Version 4.3.11(1)-release (x86_64-pc-linux-gnu)
答案1
另一个问题具体询问如何“获得当前的自纪元以来的时间(以秒为单位)。日期格式和参数在bash手册(向下滚动至printf
):
%(datefmt)T导致
printf
输出使用所产生的日期时间字符串日期函数作为strftime
(3) 的格式字符串。相应的争论 是一个整数,表示自纪元以来的秒数。可以使用两个特殊的参数值:-1
表示当前时间,以及-2
表示调用 shell 的时间。如果未指定参数,则转换的行为就像-1
已给出一样。这是通常行为的例外printf
。
因此参数必须是自纪元以来的整数秒数(例如,请参阅回答“如何将纪元时间戳转换为人类可读的格式”)。
¹ 除非您使用特殊值 (-1
或-2
) 或不使用参数(在这种情况下,它默认为-1
)