date比较在Bash中

我需要比较两个date/时间使用Bash。

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

我想将这个格式转换为int ,然后比较两个date的int

或者bash有另一种方法来比较两个date?

Solutions Collecting From Web of "date比较在Bash中"

你可以用这种方式按照字典顺序与条件结构 [[ ]]进行比较:

 [[ "2014-12-01T21:34:03+02:00" < "2014-12-01T21:35:03+02:00" ]] 

从男人:

[[表达]]
根据对条件表达式的评估返回状态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 

一种选择是将日期转换为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) )) 

(( ))语法用于创建一个算术上下文,因为我们正在比较两个数字。 如果可移植性是一个问题,你也可以使用更通用的[ ${x} -lt ${y} ]风格语法。

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

但是,如果这些问题都不涉及你,那么我会去解决问题 。