Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 符合ISO-8601标准的两个日期之间的时差(小时)_Bash_Date_Date Arithmetic_Iso8601 - Fatal编程技术网

Bash 符合ISO-8601标准的两个日期之间的时差(小时)

Bash 符合ISO-8601标准的两个日期之间的时差(小时),bash,date,date-arithmetic,iso8601,Bash,Date,Date Arithmetic,Iso8601,我有两个日期都是符合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')))" 但它不起作用。有什么好办法解决这个问题吗 我会使用这些工具 然后答案变成: >datediff 2019-02-14

我有两个日期都是符合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')))"
但它不起作用。有什么好办法解决这个问题吗

我会使用这些工具

然后答案变成:

>datediff 2019-02-14T16:09:13Z 2019-02-14T19:43:12Z-f“%H小时”
3小时
我会使用这些工具

然后答案变成:

>datediff 2019-02-14T16:09:13Z 2019-02-14T19:43:12Z-f“%H小时”
3小时
输出:

3
3
输出:

3
3

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

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

3
3

类似于@Cyrus的转换为epoch first的方法。

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

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

3
3

类似于@Cyrus的“先转换为大纪元”的方法。

比我先转换为大纪元,比我先转换为大纪元,比我先转换为大纪元