获取时间戳差异Linux命令

1rhkuytd  于 2023-10-16  发布在  Linux
关注(0)|答案(3)|浏览(114)

我有开始时间和结束时间在下面的格式

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命令我如何可以得到上述格式的时间差在秒

pinkon5k

pinkon5k1#

你的时间精确到微秒。因此,您或多或少处于正确的轨道上,但需要指定正确的日期格式。
样本代码:

endDatetime="12:53:12.846539"
startDatetime="12:53:12.219691"

endDatetimeMicros=$(date -d $endDatetime "+%s%6N")
startDatetimeMicros=$(date -d $startDatetime "+%s%6N")

result=$((endDatetimeMicros - startDatetimeMicros))

echo $result

以微秒为单位的差异:626848
要在bash中将微秒转换为秒,这是一个有用的printf命令:

printf "%.3f\n" $(bc <<< "scale=3; $result / 1000000")
qmb5sa22

qmb5sa222#

我会使用shell工具做什么:

printf '%s\n' "$endDatetime" "$startDatetime" |
    xargs -I{} date -d "{}" "+%s%N" |
    paste -sd '-' | bc

%N是纳秒。

输出

626848000
dnph8jn4

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语句。

相关问题