gnuplot:如何正确解释负时间?

gnuplot: how to correctly interpret negative times?

我对 gnuplot 中的负时间有一些疑问。

基本上,我想写一个负时间,例如为 -00:01:00,但 gnuplot 并未将其解释为 -60 秒,而是 +60 秒。 我能以某种方式理解为什么:因为 -00 小时等于 +00 小时然后 01 分钟被算作正值。

我是不是忽略了什么?是否有简单的解决方法?

更多示例如下。让我们以格式%H:%M:%S(实际上是%tH:%tM:%tS)转换一些时间。 除了第 6 行,我对所有行都很好。 第 7 行将被解释为 %tH:%tM 没有秒,这就是为什么它是 -3660 秒。

代码:

### negative times
reset session

$Data <<EOD
1   01:00:00
2   01:00:01
3  -01:00:00
4  -01:00:01
5   00:01:01
6  -00:01:01
7     -01:01
8   00:-01:-01
9   00:-01:01
EOD

myTimeFmt = "%tH:%tM:%tS"

set table $Test
    plot $Data u 1:(strcol(2)):(timecolumn(2,myTimeFmt)) w table
unset table
print $Test
### end of code

结果:

 1      01:00:00         3600
 2      01:00:01         3601
 3     -01:00:00        -3600
 4     -01:00:01        -3601
 5      00:01:01           61
 6     -00:01:01           61
 7        -01:01        -3660
 8      00:-01:-01        -61
 9      00:-01:01         -61

以下尝试包括输入以 -00 小时 %tH:%tM:%tS(或分钟 %tM:%tS)开始的负数的可能性。

它处理案例 4 和案例 6 的方式与 gnuplot 目前的处理方式不同。 解决方法将处理具有负数或 -00 小时和 额外 负数分钟或秒数的情况(情况 7-14 和 16-17),与 gnuplot 的处理方式相同。好吧,无论如何后者都是奇怪的格式。

代码:

### workaround for handling negative times
reset session

$Data <<EOD
1    01:00:00
2   -01:00:00
3    00:01:00
4   -00:01:00
5    00:00:01
6   -00:00:01
7    00:00:-01
8    00:-00:01
9    00:-00:-01
10   00:-01:01
11   00:-01:-01
12  -00:-01:-01
13  -00:-01:01
14  -00:-01:-01
15  -01:01:01
16  -01:-01:-01
17   01:-01:-01
EOD

myTimeFmt = "%tH:%tM:%tS"

myTimeSigned(fmt,s) = s[1:1] eq '-' && strptime("%tH",s)==0 && strptime(fmt,s)>0 ? \
                      -strptime(fmt,s[2:]) : strptime(fmt,s)
myTime(n,fmt) = myTimeSigned(fmt,strcol(n))

set table $Test
    plot $Data u 1:(strcol(2)):(timecolumn(2,myTimeFmt)):(myTime(2,myTimeFmt)) w table
unset table
print $Test
### end of code

结果:

         input       gnuplot  workaround

 1      01:00:00       3600    3600
 2     -01:00:00      -3600   -3600
 3      00:01:00         60      60
 4     -00:01:00         60     -60   # different
 5      00:00:01          1       1
 6     -00:00:01          1      -1   # different
 7      00:00:-01        -1      -1
 8      00:-00:01         1       1
 9      00:-00:-01       -1      -1
 10     00:-01:01       -61     -61
 11     00:-01:-01      -61     -61
 12    -00:-01:-01      -61     -61
 13    -00:-01:01       -61     -61
 14    -00:-01:-01      -61     -61
 15    -01:01:01      -3661   -3661
 16    -01:-01:-01    -3661   -3661
 17     01:-01:-01     3539    3539