2014-04-04 136 views
2

我試圖將時區從date +%z提供的通常格式轉換爲24小時系統。時區至24小時

我的意思是,當我問

# date +%z 
+0300 

我想

# date +%z | something_in_awk_or_perl 
3 

但是,當我得到

# date +%z 
-0700 

我想

# date +%z | something_in_awk_or_perl 
17 

P.S.我寧願單線解決方案

謝謝!

+1

你試過'日期+%H'? –

+0

如果是-10,該怎麼辦?你想要110嗎?那是''''''1'? – fedorqui

+0

@PetrosTsialiamanis對不起,我不想要的時間。我想要時區。 –

回答

3

如何用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 
0
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