使用 bash 内置 printf 将时间戳转换为纪元

使用 bash 内置 printf 将时间戳转换为纪元

在研究转换时间戳的不同方法时,例如

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

相关内容