如何将 Bash 字符串转换为日期?

5

我有一个包含字符串的文件:

2014-11-22 08:15:00

...表示的是2014年11月22日上午8:15

我想解析这个字符串,并使用BASH中的日期函数与当前日期进行比较。我有比较日期的代码,但两个日期都是由BASH生成的,很容易格式化和比较。然而,我无法使用从另一个系统收集的字符串进行比较。

我尝试过一些东西:

$ mydate=$(cat filewithstring);date -d $mydate
$ mydate=$(cat filewithstring);date -d '$mydate'
$ mydate=$(cat filewithstring);date -d $mydate "+%Y-%m-%d %H:%M:%S"

我最终会出现以下错误:

date: 参数 '08:00:00' 缺少前导 '+';当使用选项来指定日期时,任何非选项参数都必须是以 '+' 开头的格式字符串*

...或者...

date: 额外的操作数 '+%Y-%m-%d %H:%M:%S'

我知道如果我明确地输入该字符串,它就可以正常工作:

$ date -d '2014-11-22 08:15:00'
Sat Nov 22 08:15:00 EST 2014

最终,我希望能够做到以下几点:

  • 捕获并收集“其他”服务器中文件中的日期/时间字符串
  • 读取文件中的字符串
  • 将字符串中的日期/时间与当前日期/时间进行比较
  • 输出类似于“此事件在12分钟前处理”的内容

有什么想法吗?谢谢。

1个回答

8

这是因为你使用了单引号,导致变量的值没有被扩展。

你可以这样说:

mydate=$(<filewithstring)
date -d"$mydate" "+%Y-%m-%d %H:%M:%S"
       ^       ^

注意,mydate=$(<filewithstring) 是将文件读入变量的更优方式。


1
双引号高亮非常好 +1 - anubhava
1
完全符合我的需求。然后我将其转换为date -d"$mydate" +%s并与我的其他脚本进行比较。完美地工作。谢谢。 - Claude Lag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接