将时间跨度(以秒为单位)转换为shell中的格式化时间

Dar*_*ren 31 linux shell timespan date-formatting

我有一个$ i的变量,它是一个shell脚本中的秒,我试图将它转换为24 HOUR HH:MM:SS.壳中有可能吗?

sam*_*hen 74

这是一个有趣的hacky方式来完成你正在寻找的东西=)

date -u -d @${i} +"%T"
Run Code Online (Sandbox Code Playgroud)

说明:

  • date实用程序允许您从1970-01-01 00:00:00 UTC开始,以字符串为单位指定时间,并以您指定的任何格式输出.
  • -u选项是显示UTC时间,所以也没有因素时区偏移量(因为起始时间从1970年在UTC)
  • 以下部分是GNU date特定的(Linux):
    • -d部分告诉date从字符串接受时间信息而不是使用now
    • @${i}部分是你如何告诉date$i是在几秒钟内
  • +"%T"是格式化你的输出.从man date页面:%T time; same as %H:%M:%S.因为我们只关心这个HH:MM:SS部分,所以这适合!

  • 我认为值得一提的是这只适用于低于86400s的`i`:`i = 86400; date -u -d @ $ {i} +"%T"`会给你'00:00:00` (7认同)
  • 快速而令人印象深 (2认同)
  • @TulainsCórdova然后使用`date -u -d @“ $ i” +“%T”` (2认同)

gle*_*man 16

另一种方法:算术

i=6789
((sec=i%60, i/=60, min=i%60, hrs=i/60))
timestamp=$(printf "%d:%02d:%02d" $hrs $min $sec)
echo $timestamp
Run Code Online (Sandbox Code Playgroud)

产生 1:53:09


Ala*_*Tam 12

-d参数仅适用于coreutils(Linux)的日期.

在BSD/OS X中,使用

date -u -r $i +%T
Run Code Online (Sandbox Code Playgroud)