Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell POSIX数字时区_Shell_Timezone_Posix - Fatal编程技术网

Shell POSIX数字时区

Shell POSIX数字时区,shell,timezone,posix,Shell,Timezone,Posix,我可以得到这样的数字时区: $ date +%z -0600 但是,我最近发现POSIX date只支持打印 : 我可以用shell或其他工具获取数字版本吗 POSIX?是由POSIX定义的,因此我们可以在不同的时间循环 区域,直到找到匹配的区域: q=$(date +%H) x=-12 while [ "$x" -le 11 ] do y=$(TZ=UTC"$x" date +%H) if [ "$y" = "$q" ] then printf '%+03d00\n' "

我可以得到这样的数字时区:

$ date +%z
-0600
但是,我最近发现POSIX date只支持打印 :

我可以用shell或其他工具获取数字版本吗 POSIX?

是由POSIX定义的,因此我们可以在不同的时间循环 区域,直到找到匹配的区域:

q=$(date +%H)
x=-12
while [ "$x" -le 11 ]
do
  y=$(TZ=UTC"$x" date +%H)
  if [ "$y" = "$q" ]
  then
    printf '%+03d00\n' "$((-x))"
    break
  fi
  x=$((x + 1))
done
只有当您所在时区和UTC之间的日期没有变化时,此选项才有效。它还省略了分钟,例如,如果你在印度,这将不起作用

为了说明这一点,您需要更多的日期信息:一年中的某一天和一小时后的分钟数

#/垃圾箱/垃圾箱
T='+%j*1440+%H*60+%M'#年内分钟数:天/Y*1440分钟/d+H*60小时/分钟+min
Z=$(($(日期“$T”)-($(日期-u“$T”))*100/60)#TZ偏移为hr*100
H=${Z%??}#小时($Z是小时的百分之一,所以我们去掉最后两位)
如果[$H-lt-13];那么H=$((H+8712))#UTC比UTC早一年
elif[$H-gt 13];然后H=$((H%8736-24))#UTC落后一年
fi
如果[$H-lt-13];那么H=$((H+24))#UTC比闰年早一天
elif[$H-gt 13];那么H=$((H-24))#UTC比闰年晚一天
fi
M=${Z#$H}#百分之一百小时(在下一行变成分钟)
如果[$M!=00];然后M=$($M*60/100));fi#相对于60分钟/小时的分钟数
printf“%+03d%02d”$H$M#TZ偏移量(单位:HHMM)
这允许您通过更改
$TZ
来更改时区,因此
TZ=Asia/Calcutta myscript.sh
应产生
+0530
的TZ偏移量。(此部分可能不适用于较旧的POSIX系统。)

q=$(date +%H)
x=-12
while [ "$x" -le 11 ]
do
  y=$(TZ=UTC"$x" date +%H)
  if [ "$y" = "$q" ]
  then
    printf '%+03d00\n' "$((-x))"
    break
  fi
  x=$((x + 1))
done