Groovy - 比较日期和时间

时间:2017-03-10 04:22:02

标签: shell datetime groovy

我有两个字符串,每个字符串都来自各自的shell命令,并且格式不统一。 获得的两个字符串如下:

"dom": 'Bfrtip'

编辑:我得到上面提到的日期,一个通过git日志,另一个通过cat并存储在变量中

第一个日期通过并存储在X:

Date : Tue Feb 28 16:23:20 2017 -0600
Executed at : Tue Feb 28 17:24:06 EST 2017 

第二个日期通过以下方式获得并存储在Y:

  sh 'git log <file> | grep Date | head -n 1 > X '

现在我想在其中挑选出日期和时间,并想检查执行时间是否在Date值之后?

2 个答案:

答案 0 :(得分:1)

你走了。

def dateStr1 = 'Tue Feb 28 16:23:20 2017 -0600'
def dateStr2 = 'Tue Feb 28 17:24:06 EST 2017'
def pattern1 = "EEE MMM dd HH:mm:ss yyyy Z"
def pattern2 = "EEE MMM dd HH:mm:ss z yyyy"
def date = new Date().parse(pattern1, dateStr1)
def executeDate = new Date().parse(pattern2, dateStr2)
assert date < executeDate, 'Execute Date is earlier than the date'

您可以在线快速尝试(否定测试) Demo

编辑:根据OP的评论来解析字符串并提取日期
您可以应用 @GreBeardedGeek 的解析逻辑。

//Closure to get the date parsed
def getDate = { delimiter, dateFormat, dateStr  ->
   def dt = dateStr.substring(dateStr.indexOf(delimiter) + 1).trim()
   println dt
   new Date().parse(dateFormat, dt)
}

def dateStr1 = 'Date : Tue Feb 28 16:23:20 2017 -0600'
def dateStr2 = 'Executed at : Tue Feb 28 17:24:06 EST 2017'
def pattern1 = "EEE MMM dd HH:mm:ss yyyy Z"
def pattern2 = "EEE MMM dd HH:mm:ss z yyyy"
def date = getDate(':', pattern1, dateStr1)
def executeDate = getDate(':', pattern2, dateStr2)
assert date < executeDate, 'Execute Date is earlier than the date'

编辑#2 可以更简化为:

//Set / assign the two dates
def dateStr1 = 'Date : Tue Feb 28 16:23:20 2017 -0600'
def dateStr2 = 'Executed at : Tue Feb 28 17:24:06 EST 2017'
def getDate = { dateStr  -> Date.parse(dateStr.substring(dateStr.indexOf(':') + 1).trim()) }
assert getDate(dateStr1) < getDate(dateStr2), 'Execute Date is earlier than the date'

答案 1 :(得分:1)

与Rao的答案类似,但是有一个解析字符串的函数,不需要日期格式字符串,也不需要创建不需要的Date实例:

class DateTest{
  public static void main(String[] args) {
    String logDateString = args[0];
    String execDateString = args[1];

    Date logDate = parseDate(logDateString);
    Date execDate = parseDate(execDateString);

    System.out.println(execDate > logDate);
  }

  static def parseDate(String rawString) {
    String dateString = rawString.substring(rawString.indexOf(":") + 1).trim();
    new Date(Date.parse(dateString));
  }
}