中的日期格式/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"