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

时间:2014-12-10 12:37:31

标签: string bash shell date

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

2014-11-22 08:15:00

...代表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"

我最终得到的错误如下:

  

日期:参数'08:00:00'缺少领先' +&#39 ;;使用时   指定日期的选项,任何非选项参数必须是格式   以' +' *

开头的字符串

...或...

  

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

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

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

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

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

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:3)

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

你可以说:

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

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