Bash中的日期比较

Анд*_*дюк 6 linux bash date

我需要使用Bash比较两个日期/时间.

输入格式:2014-12-01T21:34:03 + 02:00

我想将此格式转换为int然后比较int两个日期的s.

或者bash有另一种比较两个日期的方法吗?

who*_*oan 17

您可以通过以下方式按字典顺序条件构造 进行比较[[ ]]:

[[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]]
Run Code Online (Sandbox Code Playgroud)

来自男人:

[[expression]]
根据条件表达式表达式的计算,返回0或1的状态.


新更新:

如果您需要将时间与不同的时区进行比较,您可以先用这种方式转换这些时间:

get_date() {
    date --utc --date="$1" +"%Y-%m-%d %H:%M:%S"
}

$ get_date "2014-12-01T14:00:00+00:00"
2014-12-01 14:00:00

$ get_date "2014-12-01T12:00:00-05:00"
2014-12-01 17:00:00

$ [[ $(get_date "2014-12-01T14:00:00+00:00") < $(get_date "2014-12-01T12:00:00-05:00") ]] && echo it works
it works
Run Code Online (Sandbox Code Playgroud)


Tom*_*ech 11

一种选择是将日期转换为自UNIX纪元以来的秒数:

date -d "2014-12-01T21:34:03+02:00" +%s
Run Code Online (Sandbox Code Playgroud)

然后,您可以将此整数与以相同方式处理的另一个日期进行比较:

(( $(date -d "2014-12-01T21:34:03+02:00" +%s) < $(date -d "2014-12-01T21:35:03+02:00" +%s) ))
Run Code Online (Sandbox Code Playgroud)

(( ))我们比较两个数字时,语法用于创建算术上下文.[ ${x} -lt ${y} ]如果可移植性是一个问题,您也可以使用更通用的样式语法.

以这种方式这样做的一个优点是date例如理解各种格式
date -d "next year" +%s.此外,date了解时区,因此它可以正确处理时区不同的日期对之间的比较.

但是,如果这些问题都不关心你,那么我会选择ja的解决方案.