我有一个简单的 gnuplot 命令文件:
....
set xdata time
set timefmt "%s"
set format x "%H:%M"
....
其中 x - 时间戳列。
结果 - UTC 格式的时间。我可以更改 x 轴的本地时区吗?
我有一个简单的 gnuplot 命令文件:
....
set xdata time
set timefmt "%s"
set format x "%H:%M"
....
其中 x - 时间戳列。
结果 - UTC 格式的时间。我可以更改 x 轴的本地时区吗?
今天刚刚在文档中遇到了这个:
与秒之间的转换采用世界时间(与格林威治标准时间相同)。没有更改时区或夏令时的规定。如果您的所有数据都指的是同一时区(并且都是日光或标准),则您无需担心这些事情。但如果绝对时间对您的应用程序至关重要,则您需要自己转换为 UT。
从help time/date
我今天刚碰到这个。您无需更改格式,只需更改数据即可。如果 data.txt 包含 UTC 时间戳,并且您想在 PDT 中显示它们(距 UTC 有 -7 小时),只需使用:
plot 'data.txt' using ($1+(-7*3600)):2
这会从每个 x 值中减去 7 小时(以秒为单位)。
聚会有点晚了,我没有足够的声誉点来发表评论,但为了补充 anthony 和 hermannk 的回答,我是这样用他们的信息实现的:
command.gnuplot
,假设第一个字段包含日期/时间,第二个字段包含 Y 轴的值:plot "inputfile" using ($1 - offset):2
gnuplot -e "offset=$(date +%s -d '1 Jan 1970')" command.gnuplot
偏移量通常可以正常工作,因为 gnuplot 在内部将日期/时间解释为从纪元开始的秒数。我不知道表单"offset=$(date ...)"
是否是特定于 bash 的东西,但你总是可以使用它"offset=`date ...`"
。
编辑——我发现这在处理夏令时/夏令时变化时效果不佳。我将偏移量更改为这个,现在效果更好:
command.gnuplot
,假设第一个字段包含日期/时间,第二个字段包含 Y 轴的值:plot "inputfile" using ($1 + offset):2
gnuplot -e "offset=$(echo "
日期 +%z* 36" | bc)" command.gnuplot
这是如何运作的?
date +%z
以形式或类似形式提供时区偏移量-0400
,这意味着Local_Time = UTC - 4 hours
. 如果我们认为这是一个数字(-400),那么偏移量(以秒为单位)为 -400 / 100 * 3600 = -400 * 36。请注意,这不适用于具有 30 分钟增量的时区(印度?),但我敢肯定,通过一些创建数学,您也可以涵盖这一点。
从bash的 4.1 版开始,您可以避免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
然后$tzoff
在创建.dat
文件时或者将它们添加到绘图命令文件中,或者将其添加到值中。
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