我一直在尝试在现有时间上添加 1 小时,因为时间戳采用 CST,我正在尝试将其转换为 EST。
out_date3=$(ls -lrt out.log | awk '{print $8}')
输出为 08:45
out_date4=$(out_date3 + 01:00)
我希望输出为 09:45,但 out_date4 不起作用。
答案1
假设您正在使用美国中部和东部时区,并假设您有 GNU 日期:
TZ=US/Eastern date --date='TZ="US/Central" 08:45'
“外部”(第一个)TZ 环境变量告诉 date 它应该在美国/东部时区工作;在这里,这会影响date
处理完输入后时间的打印。然后使用指定时间GNU 日期的时区规则,其中时区周围需要双引号。这里的规范--date
表示您希望打印美国/中部时区的时间 08:45。
对代码的最短更正将是:
out_date4=$(TZ=US/Eastern date --date='TZ="US/Central" '"$out_date3")
笔记
ls
一旦 out.log的最后一次修改时间超过 6 个月前,解析 的输出就会中断 - 输出中的时间格式ls
将从“月日时:分”切换到“月日年”,然后突然你的awk 语句将发送年而不是 out_date3 变量的小时和分钟!
更灵活地,再次假设 GNU 实用程序,使用stat
命令检索上次修改时间,并要求date
为您转换它:
out_date3=$(stat -c %Y out.log)
out_date4=$(TZ=US/Eastern date --date @"$out_date3")
此时,out_date3 变量中已包含 out.log 的最后修改时间(以秒为单位)。如果您想以各种格式打印它,date
我会很乐意这样做:
date --date @"$out_date3"
date +'%H:%M:%S' --date @"$out_date3"