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