我有两个字符串,每个字符串都来自各自的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值之后?
答案 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));
}
}