如何解析 /var/log/pm-suspend.log 日期来计算时间差?

如何解析 /var/log/pm-suspend.log 日期来计算时间差?

中的日期格式/var/log/pm-suspend.log类似于Wed 05 Jul 2023 04:55:30 PM +03,我认为这是date +"%a %d %b %Y %I:%m:%S %p %z"格式。

如何在 Bash 中将此日期转换为 Unix 时间戳?

答案1

该命令date不接受输入字符串:

Wed 05 Jul 2023 04:55:30 PM +03

最接近的兼容版本将是以下之一:

Wed 05 Jul 2023 04:55:30 PM
Wed 05 Jul 2023 04:55:30 +03

但两人都需要对删减信息进行补偿。

文件:date2timestamp

#!/bin/sh

# Expects a date string like "Wed 05 Jul 2023 04:55:30 PM +03" as first parameter.
# Evaluate if it's AM or PM
# remove the "AM/PM" string
# and set the time correction for the missing "PM" if necessary.

if [ "${1% PM*}"  !=  "${1}" ]; then
    echo $(( $(date -d "${1% PM*}${1#* PM}" "+%s") + 43200 ))
else
    date -d "${1% AM*}${1#* AM}" "+%s"
fi

生成的时间戳将按照 Linux 的预期采用 UTC 格式。
该脚本将日期字符串作为第一个参数:

$  date2timestamp "Wed 05 Jul 2023 04:55:30 PM +03"
1688565330

如果您可以将日志文件中的日期更改为不使用“AM/PM”语法,那么会更简单。那么只需命令date就足够了:

date -d "Wed 05 Jul 2023 16:55:30 +03" "+%s"

相关内容