将星号正常运行时间字符串转换为日期

问题描述 投票:0回答:3

我如何将“系统正常运行时间:2天,9小时,16分钟,5秒”转换为紧急日期?

我想将此日期与另一个日期进行比较。

事先谢谢。

bash date asterisk
3个回答
1
投票

假设消息将始终在固定位置包含所有日期成分,则可以使用Unix时间戳(历时秒)进行计算。

# Set t from command, or file.
t="System uptime: 2 days, 9 hours, 16 minutes, 5 seconds"
# Split into words
read -a p <<< "$t"
# Uptime in seconds
uptime=$((p[2]*24*60*60+p[4]*60*60+p[6]*60+p[8]))
now=$(date '+%s')
up_ts=$((now-uptime))
echo "Timestamp: $up_ts"
# Convert to human readable date.
up_date=$(date +'%Y-%m-%d %H:%M:%S' -d "@$up_ts")
echo "Date: $up_date"

您还可以在'up_ts'上使用bash内置日期格式。

如果正常运行时间消息的格式取决于值(例如,正常运行时间<1天,则不包括天数,则需要进行其他解析。


0
投票

如果要比较正常运行时间,最好的方法是将其转换为秒或从/proc/uptime中读取:

[/proc/uptime此文件包含两个数字:系统的正常运行时间(秒)

来源:man proc] >>

$ awk '{print $1}' /proc/uptime
3141393.94

这应该足以比较正常运行时间,并且比任何无意义的随机日期格式都容易得多。

如果您想知道该系统的确切启动日期,可以执行

$ uptime -s
2019-09-09 06:28:40

-1
投票

注意,uptime命令从/proc/uptime获取数据

© www.soinside.com 2019 - 2024. All rights reserved.