2014-06-08 37 views
0

当我获得两个日期值和相减,有时我得到负数:为什么我在bash中的日期差异导致负数?

在这些日期对象之间的工作是做两个阵列之间在SciDB(乘法两个100×100的操作,例如,阵列)。这种操作在不同情况下可能需要不到一秒钟的时间,这就是为什么我使用纳秒。 实施例输出:

[email protected]:~/some-scripts$ ./test_mult_100.sh 
execution time was 273467147 s. 
[email protected]:~/some-scripts$ ./test_mult_100.sh 
execution time was -735035957 s. 

我通过SSH经由腻子执行计算机上.SH脚本。我感到奇怪的是,即使在执行中间操作3秒以上后,我也可以获得负数。我取消设置start_time和end_time变量以避免重叠值,尽管我不认为不这样做会导致问题。

+0

可能这些数字对于'expr'来说太大了?积极的结果也是错误的。 – tripleee

+0

我甚至没有考虑过它,但这完全合理。我会尝试将纳秒变为毫秒,然后看看它是否更好。 –

+0

不幸的是,我仍然收到错误。看来$(date -u +%N)部分并不像我想要的那样一致。当我尝试将该值除以1000000(将该值转换为毫秒)时,我不仅偶尔会得到负值,但偶尔会收到错误消息:“对于基准值太大”。我试着这样做的代码: start_time = $(($(date +%N)/ 1000000)) 我想我会尝试一种不使用日期的方法。 –

回答

4

%N是进入当前秒数的纳秒数。

这不是从时代开始的纳秒数。

+0

这是事实,而且是问题的核心。在此之后,我再次搜索了这个问题,并在Stack Exchange上找到了一篇文章(所以不是堆栈溢出,但相关)。他们的帖子位于:http://superuser.com/questions/599072/bash-execution-time-in-milliseconds-mac-osx-user,面向Mac用户,但足以回答我的问题。 –

+1

我意识到我应该也可以发布我的答案。本质上,我添加了%s来检索时间戳以获得自时代以来的秒数。之后的%N然后以毫微秒为单位。例如: 例如:start_time = $(date -u +%s%N) –