就像问题听起来一样。我想从 20120203 中减去 20120115 并得到 19 作为答案。在 shell 脚本中实现这一点的最佳方法是什么?
原文由 owagh 发布,翻译遵循 CC BY-SA 4.0 许可协议
提出使用 bc
的解决方案:
current="$(date +%s.%N)" #current date, precise to nanoseconds
old="$(date +%s.%N -d "$(sh some_script_that_gives_a_date.sh)")" #convert output to ns too
diff=$(echo "$current-$old" |bc)
date +%s.%N -d $1
获取任意日期并将其转换为 给定格式 (如在本例中 +%s.%N
, float
秒) 。意识到
-d 不是 POSIX 日期的一部分。 [但是]只要[您]不在像 Solaris 这样的发行版上工作([OP] 已将其标记为 linux 而不是 unix)[您]就应该很好。 :)
( jaypal singh 对此答案 的评论)
要将其转换回人类可读的,您可以使用:
date $2 -d @0$diff #Pad diff with leading zero
其中 $2
再次是日期格式,请参见 此处的示例
原文由 Cadoiz 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答804 阅读✓ 已解决
2 回答3.2k 阅读