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

Cla*_*Lag 4 string bash shell date

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

2014-11-22 08:15:00
Run Code Online (Sandbox Code Playgroud)

... 代表Nov 22 2014 @ 8:15 AM.

我想解析这个字符串并将其与 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"
Run Code Online (Sandbox Code Playgroud)

我最终遇到如下错误:

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

...或者...

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

我知道如果我明确输入字符串,它工作正常:

$ date -d '2014-11-22 08:15:00'
Sat Nov 22 08:15:00 EST 2014
Run Code Online (Sandbox Code Playgroud)

最后,我希望做到以下几点:

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

有任何想法吗?谢谢。

fed*_*qui 7

这是因为您使用了单引号,因此不会扩展变量的值。

你可以说:

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

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