我可以在以毫秒为单位的UNIX时间戳给出时间吗?

时间:2015-06-18 18:36:38

标签: datetime gnuplot

我在CentOS 6.6上使用gnuplot 4.4。

我发现很多example在线显示以下内容(请注意使用%.3S)将使“12:42:51.047”等时间戳得以解析并用作X轴值:

set xdata time
set format x "%H:%M:%.3S"
set timefmt "%H:%M:%S"

但是,我的输入与HH:MM:SS.mmm不同,但与SSSSSSSSSS.mmm类似,其中整数部分是UNIX时间戳。

我尝试了以下操作,但由于所有数据点都在“00:00:00”呈现,因此解析似乎失败了:

set xdata time
set format x "%.3s"
set timefmt "%H:%M:%S"

The manual没有任何迹象表明这是可能的,但是,再说一次,它并没有说%H:M:%.3S也会起作用。 有可能做我想做的事吗?如果是这样,怎么样?

3 个答案:

答案 0 :(得分:4)

必须仅为输出提供精度。对于解析,秒(或时间戳)被视为浮点数。但是,从版本4.6.4开始(在此处测试),似乎只支持用毫秒读取时间戳。

但是,有一种解决方法:在($1)语句中指定1而不是using会使gnuplot将该值视为正常的浮点数。请注意,我没有设置任何timefmt,因为无论如何它都会被这种解决方法规避。

然后你还必须知道,在版本5之前,gnuplot的时间参考是2000年1月1.所以你必须通过相应的偏移来校正(2000年1月1日的Unix时间戳是946684800)。因此,以下内容适用于gnuplot 4.4:

set xdata time
set format x '%d.%m.%Y %H:%M:%S'
plot 'file.dat' using ($1 - 946684800):2

答案 1 :(得分:2)

除了停止对抗默认设置外,您根本不需要做任何事情。对于此输入数据:

1000000000.001 1
1000000000.002 2
1000000000.003 3
1000000000.004 3
1000000000.005 2
1000000000.006 1

以下命令

gnuplot> plot "gnuplotdatatest.txt" w l
gnuplot> set yrange [0:4]
gnuplot> replot

产生以下输出

enter image description here

SSSSSSSSSS.mmm格式的时间戳是浮点数的简单(十进制表示),这是GNUplot默认处理输入列的方式。

答案 2 :(得分:1)

较新版本的gnuplot支持带有小数部分的Unix时间戳格式.ab.desaturate{ -webkit-filter: grayscale(1); -webkit-filter: grayscale(100%); filter: gray; filter: grayscale(100%); filter: url(desaturate.svg#d3); } 。您需要更新到4.6或5.x或更高版本。

如果你不确定,请检查src / time.c。