Question

I am trying to convert time zones from the usual format that date +%z is giving, to a 24 hour system.

What I mean is that when I ask for

# date +%z
+0300

I want to get

# date +%z | something_in_awk_or_perl
3

But, when I get

# date +%z
-0700

I want

# date +%z | something_in_awk_or_perl
17

P.S. I would prefer an one-line solution

Thanks!

Était-ce utile?

La solution

How about using 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

If you want decimal output, change the output separator and divide by 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

Autres conseils

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top