将 linux sysuptime 转换为格式良好的日期

将 linux sysuptime 转换为格式良好的日期

我想/proc/uptime以良好的格式显示为:

DD:HH:MM:SS

/proc/uptime给我以秒为单位的系统时间,是否有将秒转换为这种格式的标准解决方案?

答案1

这是一种没有的方法perl

awk '{printf("%d:%02d:%02d:%02d\n",($1/60/60/24),($1/60/60%24),($1/60%60),($1%60))}' /proc/uptime

答案2

例如,您可以使用 perl 和一些简单的数学来做到这一点:

cat /proc/uptime |  perl -ne '/(\d*)/ ; printf "%02d:%02d:%02d:%02d\n",int($1/86400),int(($1%86400)/3600),int(($1%3600)/60),$1%60' 

如果不需要秒数,则只需运行该uptime命令即可。然后它的输出可以简单地转换为 DD:HH:MM。

例如使用(仅当正常运行时间 > 1 小时时才以这种方式工作)

 uptime | perl -ne '/(\d*) day[^\d]*(\d*):(\d*)/ ; printf "%02d:%02d:%02d\n", $1, $2, $3'

答案3

不,因为这并不是一个真正的难题。使用整数除法将秒数除以 86400 即可得到天数。取余数除以 3600 即可得到小时数。将余数除以 60 即可得到分钟数,剩下的就是秒数。expr如果您的 shell 足够古老,本身不支持算术,那么所有这些都可以使用命令从 shell 完成

获取自纪元以来的秒数并将其转换为人类可读的日期这是一个难题,因此有标准方法可以做到这一点,例如date -r SECONDS从 shell 中。但这是另一个问题。

答案4

$ s=12345678
$ printf '%d:%02d:%02d:%02d\n' $((s/86400)) $((s/3600%24)) $((s/60%60)) $((s%60))
142:21:21:18

将自纪元以来的秒数转换为日期和时间:

$ gdate -d @1234567890 '+%F %T' # GNU date
2009-02-14 01:31:30
$ date -r 1234567890 '+%F %T' # BSD date
2009-02-14 01:31:30

相关内容