Linux Bash中的日期比较

Linux Bash中的日期比较,linux,bash,date,Linux,Bash,Date,我需要使用Bash比较两个日期/时间 输入格式:2014-12-01T21:34:03+02:00 我想将此格式转换为int,然后比较两个日期的ints 或者bash是否有其他方法来比较两个日期?您可以通过以下方式与[[]]进行比较: [[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]] get_date() { date --utc --date="$1" +"%Y-%m-%d %H:%M:%S" }

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

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

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

或者bash是否有其他方法来比较两个日期?

您可以通过以下方式与
[[]]
进行比较:

[[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]]
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
[“2014-12-01T21:34:03+02:00”<“2014-12-01T21:35:03+02:00”]
从那个男人那里:

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


最新更新:

如果需要比较不同时区的时间,可以先通过以下方式转换这些时间:

[[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]]
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
get_date(){
日期--utc--日期=“$1”+%Y-%m-%d%H:%m:%S”
}
$get_日期“2014-12-01T14:00:00+00:00”
2014-12-01 14:00:00
$get_日期“2014-12-01T12:00:00-05:00”
2014-12-01 17:00:00
$[[$(获取日期“2014-12-01T14:00:00+00:00”)<$(获取日期“2014-12-01T12:00:00-05:00”)]&&echo它可以工作
它起作用了

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

date -d "2014-12-01T21:34:03+02:00" +%s
然后,您可以将此整数与另一个以相同方式处理的日期进行比较:

(( $(date -d "2014-12-01T21:34:03+02:00" +%s) < $(date -d "2014-12-01T21:35:03+02:00" +%s) ))
($(日期-d“2014-12-01T21:34:03+02:00”+%s)<$(日期-d“2014-12-01T21:35:03+02:00”+%s)))
((
语法用于在比较两个数字时创建算术上下文。如果要考虑可移植性,还可以使用更通用的
[${x}-lt${y}]
样式语法

这样做的一个好处是
date
可以理解多种格式,例如
日期-d“明年”+%s
。此外,
date
了解时区,因此它可以正确处理时区不同的日期对之间的比较


但是,如果这两个问题都与您无关,那么我会选择。

如果系统中没有[[]],如何进行比较?