如何在gnuplot中设置时区?
我有一个简单的gnuplot命令文件:如何在gnuplot中设置时区?,gnuplot,bash,Gnuplot,Bash,我有一个简单的gnuplot命令文件: .... set xdata time set timefmt "%s" set format x "%H:%M" .... 其中x-timestamp列 结果-UTC格式的时间。我可以为x轴更改本地timezome吗?今天的文档中遇到了这个问题: 秒与秒之间的转换采用世界时(相同 作为格林威治标准时间)。没有更改时间的规定 区域或夏令时。如果所有数据都指向同一时区 (并且都是日光或标准)你不需要担心这些 东西。但是,如果绝对时间对应用程序至关重要,您
....
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小时(以秒为单位)。派对有点晚了,我没有足够的声誉点来评论,但要补充安东尼和赫尔曼克的答案,我是如何利用他们的信息实施的:
- 在
中,假设第一个字段包含日期/时间,第二个字段包含Y轴的值:命令.gnuplot
使用($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 todate
:
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的数字时区。