我有一个简单的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轴的本地时区吗?
今天在文档中发现了以下内容:
从秒数转换为日期和时间时,假定使用的是通用时间(与格林威治标准时间相同)。没有考虑更改时区或夏令时的情况。如果所有数据均参考同一时区(并且都处于夏令时或标准时间),则无需担心这些问题。但如果绝对时间对您的应用程序至关重要,则需要自己转换为通用时间。
来自 help time/date
我今天刚看到这个。你不需要改变格式,只需改变数据。如果 data.txt 包含 UTC 时间戳,并且你想在 PDT(比 UTC 少7小时)中显示它们,只需使用:
plot 'data.txt' using ($1+(-7*3600)):2
这将从每个x值中减去7小时(以秒为单位)。
date +%z
返回当前数字时区,而date +%z --date=@1520000000
返回纪元时间1520000000的数字时区。 - hermannkTZ=Europe/Amsterdam tzoff=$(printf "%(%z)T")
tzoff=${tzoff:0:1}$(( ( 10#${tzoff:1:2} * 3600 + 10#${tzoff:3:2}* 60 ) ))
echo $tzoff
command.gnuplot
中,假设第一个字段包含日期/时间,第二个字段包含 Y 轴的值:plot "inputfile" using ($1 + offset):2
gnuplot -e "offset=$(echo "$(date +%z) * 36" | bc)" command.gnuplot
这是如何工作的?date +%z
提供类似于 -0400
的时区偏移量,这意味着 本地时间 = UTC - 4 小时
。如果我们把它当成一个数字(-400),那么偏移量就是 -400 / 100 * 3600 = -400 * 36 秒。请注意,这对于具有 30 分钟增量的时区(印度?)不起作用,但我相信通过一些巧妙的数学处理,你也可以解决这个问题。
从bash 4.1版本开始,您可以避免使用forks来执行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
printf -v plotcmd 'plot \47file.dat\47 using ($1%s):2' $tzoff
echo "$plotcmd"
plot 'file.dat' using ($1-25200):2
strptime
魔法不是很擅长,也许其他人可以做到。 - mgilson