![将什么格式传递给 printf 将秒转换为 hh:mm:ss?](https://linux22.com/image/217321/%E5%B0%86%E4%BB%80%E4%B9%88%E6%A0%BC%E5%BC%8F%E4%BC%A0%E9%80%92%E7%BB%99%20printf%20%E5%B0%86%E7%A7%92%E8%BD%AC%E6%8D%A2%E4%B8%BA%20hh%3Amm%3Ass%EF%BC%9F.png)
答案1
使用printf
ksh93 shell 的内置功能,并假设$elapsed
小于 86400(一天),则为:
TZ=UTC0 printf '%(%T)T\n' "#$elapsed"
或者使用printf
最新版本的 bash shell 的内置功能(它以不兼容的方式复制了 ksh93 功能的子集):
TZ=UTC0 printf '%(%T)T\n' "$elapsed"
%(strftime-format)T
是一个 ksh93 扩展,它使用一个被解释为时间戳的参数,并根据strftime()
格式规范对其进行格式化,其中%T
缩写%H:%M:%S
以 HH:MM:SS 24 小时格式给出一天中的时间。ksh93
处理各种不同的时间戳格式,包括#number
Unix 纪元时间,同时bash
仅处理被解释为 Unix 纪元时间的数字,除了-1
解释为现在并-2
解释为调用 shell 的时间。
使用zsh
shell 及其strftime
内置组件:
zmodload zsh/datetime
TZ=UTC0 strftime %T $elapsed
使用 GNU 或 busybox date
:
date -ud "@$elapsed" +%T
这些基本上解释$elapsed
为 Unix 纪元时间,即自 1970-01-01 00:00:00 +0000 以来的 Unix 秒数,因此TZ=UTC0
可以-u
获取 1970 年 1 月 1 日相应的 UTC 时间。
顺便提一句,您链接到的手册页似乎尝试(但失败)记录 GNUprintf
实现和printf
内置bash
GNU shell(标准printf
实用程序的两个不完全兼容的实现)之间的混合,我不会信任该站点。
跑步man printf
在你的系统上获取手册页你的独立printf
实用程序,或info bash printf
或info zsh printf
或手册页你的shell 如果 zsh 和 bash 都没有其printf
内置文档(如果有的话)(大多数 shell 都有)。
1 但请注意,如果从fish
shell 内运行,man printf
将为您提供 Fish 内置函数的手册页printf
。