Bash 时区至24小时
我正在尝试将时区从Bash 时区至24小时,bash,timezone,Bash,Timezone,我正在尝试将时区从date+%z提供的常用格式转换为24小时制 我的意思是当我要求 # date +%z +0300 我想去 # date +%z | something_in_awk_or_perl 3 但是,当我 # date +%z -0700 我想要 # date +%z | something_in_awk_or_perl 17 另外,我更喜欢单线解决方案 谢谢 使用awk怎么样: $ TZ=UTC-1 date +%:::z | awk 'BEGIN{FS=OFS=":"}{
date+%z
提供的常用格式转换为24小时制
我的意思是当我要求
# date +%z
+0300
我想去
# date +%z | something_in_awk_or_perl
3
但是,当我
# date +%z
-0700
我想要
# date +%z | something_in_awk_or_perl
17
另外,我更喜欢单线解决方案
谢谢 使用awk怎么样:
$ TZ=UTC-1 date +%:::z | awk 'BEGIN{FS=OFS=":"}{$1=(24+$1)%24}1'
1
$ TZ=UTC+7:30 date +%:::z | awk 'BEGIN{FS=OFS=":"}{$1=(24+$1)%24}1'
17:30
如果需要十进制输出,请更改输出分隔符并除以6:
$ TZ=UTC-1 date +%:::z | awk -F: 'BEGIN{OFS="."}{$1=(24+$1)%24;$2/=6}1'
1.0
$ TZ=UTC+7:30 date +%:::z | awk -F: 'BEGIN{OFS="."}{$1=(24+$1)%24;$2/=6}1'
17.5
你试过日期+%H吗?如果是-10怎么办?你要110?也就是说,
-
->1
?@Petrostssialiamani很抱歉,我不想占用时间。我想要时区。
for tz in America/Juneau America/St_Johns UTC Australia/Eucla Asia/Tokyo; do
TZ=$tz date "+%z %Z" |
gawk 'match($1,/([-+])([0-9][0-9])([0-9][0-9])/,a) {
sign = (a[1] == "-" ? -1 : 1)
print $2, $1, (sign*(a[2] + a[3]/60) + 24) % 24
}'
done
AKDT -0800 16
NDT -0230 22.5
UTC +0000 0
CWST +0845 8.75
JST +0900 9