日期转换问题

日期转换问题

我一直在尝试在现有时间上添加 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"

相关内容