如何在gnuplot中设置时区?

如何在gnuplot中设置时区?,gnuplot,bash,Gnuplot,Bash,我有一个简单的gnuplot命令文件: .... set xdata time set timefmt "%s" set format x "%H:%M" .... 其中x-timestamp列 结果-UTC格式的时间。我可以为x轴更改本地timezome吗?今天的文档中遇到了这个问题: 秒与秒之间的转换采用世界时(相同 作为格林威治标准时间)。没有更改时间的规定 区域或夏令时。如果所有数据都指向同一时区 (并且都是日光或标准)你不需要担心这些 东西。但是,如果绝对时间对应用程序至关重要,您

我有一个简单的gnuplot命令文件:

 ....
set xdata time
set timefmt "%s"
set format x "%H:%M"
....
其中x-timestamp列


结果-UTC格式的时间。我可以为x轴更改本地timezome吗?

今天的文档中遇到了这个问题:

秒与秒之间的转换采用世界时(相同 作为格林威治标准时间)。没有更改时间的规定 区域或夏令时。如果所有数据都指向同一时区 (并且都是日光或标准)你不需要担心这些 东西。但是,如果绝对时间对应用程序至关重要,您将 你自己需要转换成UT


帮助时间/日期

我今天刚刚遇到了这个问题。您不需要更改格式,只需更改数据即可。如果data.txt包含UTC格式的时间戳,并且您希望以PDT格式显示它们(-UTC后7小时),只需使用:

plot 'data.txt' using ($1+(-7*3600)):2

这将从每个x值中减去7小时(以秒为单位)。

派对有点晚了,我没有足够的声誉点来评论,但要补充安东尼和赫尔曼克的答案,我是如何利用他们的信息实施的:

  • 命令.gnuplot
    中,假设第一个字段包含日期/时间,第二个字段包含Y轴的值:
使用($1-偏移量):2打印“inputfile”

  • 从(bash)命令行调用gnuplot时:
gnuplot-e“offset=$(日期+%s-d'1970年1月1日')”命令。gnuplot

偏移量通常可以正常工作,因为gnuplot在内部将日期/时间解释为从历元开始的秒数。我不知道表单
“offset=$(date…)
是否是bash特有的东西,但是您可以始终使用
“offset=`date…`”

编辑-- 我发现在处理DST/夏季时间变化时,这种方法不太有效。我将偏移量计算更改为此,现在效果更好:

  • 命令.gnuplot
    中,假设第一个字段包含日期/时间,第二个字段包含Y轴的值:
使用($1+偏移量):2打印“inputfile”

  • 从(bash)命令行调用gnuplot时:
gnuplot-e“offset=$(echo“
date+%z
*36”| bc)”命令。gnuplot

这是怎么回事?
date+%z
-0400
或类似形式提供时区偏移量,这意味着
本地时间=UTC-4小时
。如果我们考虑这个数(- 400),那么在几秒钟内的偏移量是- 400/100×3600=-400*36。 请注意,这不适用于以30分钟为增量的时区(印度?),但我相信通过一些创建数学,您也可以涵盖这一点。

除了前面的正确答案,下面是我如何做到这一点的 从的4.1版开始,您可以避免为此使用forks to
date

printf -v tzoff "%(%z)T" -1
tzoff=${tzoff:0:1}$(( ( 10#${tzoff:1:2}* 3600 + 10#${tzoff:3:2}* 60 ) ))
一些样本:

TZ=Asia/Katmandu printf -v tzoff "%(%z)T" -1
echo $tzoff 
+0545

tzoff=${tzoff:0:1}$(( ( 10#${tzoff:1:2}* 3600 + 10#${tzoff:3:2}* 60 ) ))
echo $tzoff 
+20700

TZ=America/Chihuahua printf -v tzoff "%(%z)T" -1
echo $tzoff 
-0700

tzoff=${tzoff:0:1}$(( ( 10#${tzoff:1:2}* 3600 + 10#${tzoff:3:2}* 60 ) ))
echo $tzoff 
-25200
然后在创建
.dat
文件时,或者通过在绘图命令文件中添加这些值,将此
$tzoff
添加到值中

printf -v plotcmd 'plot \47file.dat\47 using ($1%s):2' $tzoff

echo "$plotcmd"
plot 'file.dat' using ($1-25200):2

此处发布的代码片段对我不起作用,但这似乎起到了作用:

TZ=Europe/Amsterdam tzoff=$(printf "%(%z)T")
tzoff=${tzoff:0:1}$(( ( 10#${tzoff:1:2} * 3600 + 10#${tzoff:3:2}* 60 ) ))
echo $tzoff

你能提供一些样本数据吗?我已经做了一些尝试,恐怕我失败了。。。但是我对时区
strtime
magic不太在行,所以可能会有其他人来处理。我发现这个问题已经很老了,而且似乎从那以后答案就没有改变。我觉得很糟糕,不得不修改数据以获得正确的日期渲染。更新版本中有任何更改吗?您可以使用date命令获得偏移量:date+%s-d'1970年1月1日'anthonie的注释的改进:
date+%z
生成当前数字时区,
date+%z--date=@1520000000
生成新纪元时间1520000000的数字时区。