将什么格式传递给 printf 将秒转换为 hh:mm:ss?

将什么格式传递给 printf 将秒转换为 hh:mm:ss?

我正在查看以下形式的说明:

$ printf [format] $elapsed

$elapsed秒表示。我希望它输出“hh:mm:ss”。我无法format弄清楚男人。有人可以提出建议吗?

答案1

使用printfksh93 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处理各种不同的时间戳格式,包括#numberUnix 纪元时间,同时bash仅处理被解释为 Unix 纪元时间的数字,除了-1解释为现在-2解释为调用 shell 的时间。

使用zshshell 及其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内置bashGNU shell(标准printf实用程序的两个不完全兼容的实现)之间的混合,我不会信任该站点。

跑步man printf 在你的系统上获取手册页你的独立printf实用程序,或info bash printfinfo zsh printf或手册页你的shell 如果 zsh 和 bash 都没有其printf内置文档(如果有的话)(大多数 shell 都有)。


1 但请注意,如果从fishshell 内运行,man printf将为您提供 Fish 内置函数的手册页printf

相关内容