将linux sysuptime转换为格式正确的日期


11

我想以以下/proc/uptime格式显示:

DD:HH:MM:SS

/proc/uptime 给我几秒钟的系统时间,是否存在将秒转换为这种格式的标准解决方案?

Answers:


15

这是没有的方法perl

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

1
好答案。 \n 对于换行会很好!
ankit7540

4

例如,您可以使用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。

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

 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从外壳程序中。但这是一个不同的问题。


3

修改此答案的相关部分。

只要您的正常运行时间少于一年,就可以使用以下命令:

TZ=UTC date -d@$(cut -d\  -f1 /proc/uptime) +'%j %T' | awk '{print $1-1"d",$2}'

我提取了正常运行时间文件的第一个字段,因为至少在我的Linux上,第二个字段包含总空闲时间。我将其视为自纪元以来的秒数,并将其转换为一年中的日期,然后转换为小时,分钟和秒。由于一年中的一天从1开始,因此我在最终的awk调用中减去1 。


2
$ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.