两个 ISO - 8601 兼容日期之间的时差(以小时为单位)

Time difference in hours between 2 ISO - 8601 compliant dates

我有 2 个日期都是符合 ISO - 8061 标准的日期格式。

echo $START
2019-02-14T16:09:13Z

echo $END
2019-02-14T19:43:12Z

现在我想找出两者之间的时差。我希望差异以小时为单位。

我试过的是:

echo "$(($(date -d "$START" '+%s') - $(date -d "$END" '+%s')))"

但是不行。任何想法什么是解决这个问题的最佳方法?

我会使用 dateutils 工具。

那么答案就变成了:

> datediff 2019-02-14T16:09:13Z 2019-02-14T19:43:12Z -f "%H hours"
3 hours
echo "$((($(date -d "$END" '+%s') - $(date -d "$START" '+%s'))/60/60))"

输出:

3

在使用内置 BSD 的 macOS 上 date 需要更详细的解决方案:

echo "$((($(date -jf '%Y-%m-%dT%H:%M:%SZ' "$END" '+%s') - \
    $(date -jf '%Y-%m-%dT%H:%M:%SZ' "$START" +%s))/3600 ))"

输出:

3

与@Cyrus 的 方法类似,首先转换为纪元。