我有开始时间和结束时间在下面的格式
endDatetime="12:53:12.846539"
startDatetime="12:53:12.219691"
使用下面的命令iam试图找到时间戳的差异在秒..但得到无效的日期
expr $(date -d "$startDatetime" +%s) - $(date -d "$endDatetime" +%s)
date: invalid date '12:53:12.846539'
date: invalid date '12:53:12.219691
另一种尝试
date -d "12:53:12.846539" +%s
date: invalid date '12:53:12.846539'
使用Linux命令我如何可以得到上述格式的时间差在秒
3条答案
按热度按时间pinkon5k1#
你的时间精确到微秒。因此,您或多或少处于正确的轨道上,但需要指定正确的日期格式。
样本代码:
以微秒为单位的差异:626848
要在bash中将微秒转换为秒,这是一个有用的printf命令:
qmb5sa222#
我会使用shell工具做什么:
%N
是纳秒。输出
dnph8jn43#
使用基本的UNIX工具计算时差并没有什么好办法。涉及日期的计算很容易在闰年和闰秒等情况下变得棘手,最好使用适当的编程库,这些库显式构建以处理所有这些复杂性。
你可以用Python来做这件事,希望它仍然福尔斯你对“Linux工具”的定义。
这个Python一行程序以示例中的格式获取开始和结束时间,并以 * 秒 * 为单位打印它们的差值:
python3 -c 'import sys; _, start, end = sys.argv; from datetime import datetime; format = "%H:%M:%S.%f"; delta = datetime.strptime(end, format) - datetime.strptime(start, format); print(delta.microseconds)' "12:53:12.219691" "12:53:12.846539"
输出是一个不起眼的0,因为在发布的例子中的差异小于一秒。
您可能希望通过将
print(delta.microseconds)
更改为print(f"{delta.seconds}.{delta.microseconds}")
来打印秒 * 和 * 微秒。要以其他格式或其他详细信息打印,请调整
print
语句。