从文件中读取并转换日期

从文件中读取并转换日期

我正在使用 CentOS,我想编写一个 shell 脚本。所以

我有一个带有日期的文件:

> 
> cat VM1_EOMAP_TIME.log
07 Sep 2022 16:30
> 

我想获取自当前时间以来的分钟数和文件中的日期

我的想法是:(“从当前时间开始的纪元”-“从该文件的日期开始的纪元”)/60

但我无法获得“当前时间的纪元”

> cat VM1_EOMAP_TIME.log
07 Sep 2022 16:30
 
> date --date='07 Sep 2022 16:30' +%s
1662568200
 
> date --date=$(cat VM1_EOMAP_TIME.log) +%s  
date: extra operand ‘2022’
Try 'date --help' for more information.

> date --date=`cat VM1_EOMAP_TIME.log` +%s
date: extra operand ‘2022’
Try 'date --help' for more information.

> TTT="07 Sep 2022 16:30"
> echo $TTT
07 Sep 2022 16:30

> date --date=$TTT +%s
date: extra operand ‘2022’
Try 'date --help' for more information.

为什么我收到“日期:额外操作数‘2022’”错误?

答案1

如果您的 bash 是最近的,则当前时间(纪元秒)是内置的:$EPOCHSECONDS

否则,bash 的 printf 可以使用%(fmt)T指令和魔术值“-1”来获取它:

printf -v current_epoch '%(%s)T' -1

此外,bash 有一个内置的便利$(cat file)=> $(<file)

log_epoch=$( date -d "$(<VM1_EOMAP_TIME.log)" "+%s" )

答案2

你的问题是引用。您应该用它date -u来补偿时区。

$ echo "07 Sep 2022 16:30" > infile
$ var="$(<infile)"
$ cat infile; echo "$var"
07 Sep 2022 16:30
07 Sep 2022 16:30

$ date -ud "$(<infile)" ;   date -ud "$var" +%s
1662568200
1662568200

$ varlog=$(date -ud "$var" +%s)    #capture value for later

bash 中还有其他更简单的解决方案:

$ echo "$EPOCHSECONDS"; printf '%(%s)T' '-1'
1662582600
1662582600

$ var1="$EPOCHSECONDS"; printf -v var2 '%(%s)T' '-1'
$ echo "$var1 $var2"
1662568200 1662568200

所以,最终的数学可能是:

$ echo $((var2 - varlog))
10747

$ echo $(((var2-varlog)/60))
179

有关的

答案3

$ let diff=($(date +%s -d 'today')-$(date +%s -f VM1_EOMAP_TIME.log))/60
$ echo "$diff"

相关内容