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

String 如何将bash字符串转换为日期?,string,bash,shell,date,String,Bash,Shell,Date,我有一个包含字符串的文件: 2014-11-22 08:15:00 。。。代表2014年11月22日上午8:15 我想解析这个字符串,并将其与BASH中的date函数一起使用,以与当前日期进行比较。 我有比较日期的代码,但这两个日期都是由BASH生成的,很容易格式化和比较。但是,我不能使用字符串(从另一个系统收集)进行比较 我试过这样的方法: $ mydate=$(cat filewithstring);date -d $mydate $ mydate=$(cat filewithstring

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

2014-11-22 08:15:00
。。。代表2014年11月22日上午8:15

我想解析这个字符串,并将其与BASH中的date函数一起使用,以与当前日期进行比较。 我有比较日期的代码,但这两个日期都是由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”缺少前导“+”;当使用 选项指定日期,任何非选项参数必须为格式 以“+”开头的字符串*

……或者

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

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

$ date -d '2014-11-22 08:15:00'
Sat Nov 22 08:15:00 EST 2014
最后,我希望做到以下几点:

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

有什么想法吗?谢谢。

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

你可以说:

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

mydate=$(双引号突出显示非常好+1正是我需要的。然后我将其转换为date-d“$mydate”+%s,并与我的其他脚本进行比较。效果非常好。谢谢。