Conversione del fuso orario dalla riga di comando


19

Conosco http://www.timeanddate.com/worldclock/converter.html

Non riesco a capire come interrogare http://www.google.com in un formato naturale sano come "5:00 BST in PST".

O devo scrivere una tale app?


Cosa intendi esattamente? Riga di comando linux? Comando puoi digitare in Google? Che cosa?!
Dal Hundal,

la riga di comando nella shell e la casella di query di Google sono entrambe una riga di comando per me
hendry,

1
forse uno strumento migliore farebbe le città in base ai codici aeroportuali, alle 17:00 LHR in OFS
hendry,

@hendry dateutils può eseguire la conversione del fuso orario in base ai codici aeroportuali iata e icao: dateconv 2017-05-16T17:00 --from-zone iata:SFO --zone iata:LHR->2017-05-17T01:00:00
hroptatyr

Risposte:


35

Sono le 18:00 a Taipei, che ore sono qui?

date --date='TZ="Asia/Taipei" 18:00'
Fri Jul 16 11:00:00 BST 2010

Alle 11 qui a Londra, che ore sono a Taipei?

TZ=Asia/Taipei date -d "11:00 BST"
Fri Jul 16 18:00:00 CST 2010

Strano, ma il primo modo non funziona per me: TZ=Europe/Moscow date --date='TZ="Asia/Taipei" 18:00' Mon Mar 27 18:00:00 CST 2017- cioè mi dice solo la data a Taipei, non la mia data locale per quel momento. Anche se manpage dice che il tuo metodo è corretto. Mi sto perdendo qualcosa? ... coreutils 8.26, Arch Linux
MarSoft

Per trovare un identificatore del fuso orario usa qualcosa come: timedatectl list-timezones|grep -i taipei(stampe Asia/Taipei), timedatectl list-timezones|grep -i berlin(stampe Europe/Berlin), timedatectl list-timezones|grep -i angeles(stampe America/Los_Angeles)
exebook

5

Questo esempio è tratto da http://www.pixelbeat.org/cmdline.html#dates

Fornisce l'ora locale corrispondente alle 9:00 sulla costa occidentale degli Stati Uniti, tenendo conto delle diverse transizioni di risparmio di luce diurna.

date --date='TZ="America/Los_Angeles" 09:00 next Fri'

Usa tzselect per ottenere il TZ. Il formato PST è ambiguo. IST = ora solare indiana e ora legale irlandese, ad esempio.


2
Non lo sapevo tzselect, grazie. Se si immette un input "TZ" errato, è possibile ottenere risultati fuorvianti, ad esempio TZ = data di Londra ven 16 lug 10:28:52 Londra 2010
hendry

5

Penso che questo sia più vicino a ciò che l'OP ha chiesto (dal momento che non sa necessariamente che BST è Taipei? E la risposta non spiega come arrivare a "Asia / Taipei" da "BST").

Prima la mia data attuale:

$ date
Mon Apr 21 13:07:21 MDT 2014

Quindi la data che voglio sapere:

$ date -d '5pm BST'
Mon Apr 21 15:00:00 MDT 2014

Quindi so che 5pm BSTmancano 2 ore.

Di solito dimentico se devo aggiungere o rimuovere due ore dalle ore EDT, quindi ho un piccolo script con i fusi orari comuni con cui devo lavorare:

$ cat tz
#!/bin/bash
TZ='America/Edmonton' date
TZ='America/Chicago' date
TZ='America/New_York' date

E l'output:

$ tz
Mon Apr 21 13:12:32 MDT 2014
Mon Apr 21 14:12:32 CDT 2014
Mon Apr 21 15:12:32 EDT 2014

Le posizioni valide per lo tzscript sono disponibili qui /usr/share/zoneinfo.

Ma ancora una volta, per i tempi in futuro, ho appena usato date -d '<time> <timezone>'.


2

Usa Wolfram Alpha . All'URL di base ...

http://www.wolframalpha.com/input/?i=

aggiungere la conversione, con spazi sostituiti da +. Per esempio:

http://www.wolframalpha.com/input/?i=5+PM+CET+to+PST

Si noti che Wolfram Alpha non sembra riconoscere BSTcome fuso orario.


come si cercano rapidamente i codici di fuso orario?
hendry,

@hendry Questa è una fantastica mappa online interattiva: timeanddate.com/time/map/#!cities=241
DavidG

1

So che è un vecchio thread, ma avevo bisogno di un codice per lo stesso caso d'uso e, sulla base delle idee qui, ho sviluppato questo piccolo script bash:

#!/bin/bash
# ig20180122 - displays meeting options in other time zones
# set the following variable to the start and end of your working day
myday="8 20" # start and end time, with one space
# set the local TZ
myplace='America/Sao_Paulo'
# set the most common places
place[1]='America/Toronto'
place[2]='America/Chicago' # Houston as well
place[3]='Europe/Amsterdam'
place[4]='Europe/Dublin'
# add cities using place[5], etc.
# set the date format for search
dfmt="%m-%d" # date format for meeting date
hfmt="+%B %e, %Y" # date format for the header
# no need to change onwards
format1="%-10s " # Increase if your cities are large
format2="%02d "
mdate=$1
if [[ "$1" == "" ]]; then mdate=`date "+$dfmt"`; fi
date -j -f "$dfmt" "$hfmt" "$mdate"
here=`TZ=$myplace date -j -f "$dfmt" +%z  "$mdate"`
here=$((`printf "%g" $here` / 100))
printf "$format1" "Here" 
printf "$format2" `seq $myday` 
printf "\n"
for i in `seq 1 "${#place[*]}"`
do
    there=`TZ=${place[$i]} date -j -f "$dfmt" +%z  "$mdate"`
    there=$((`printf "%g" $there` / 100))
    city[$i]=${place[$i]/*\//}
    tdiff[$i]=$(($there - $here))
    printf "$format1" ${city[$i]}
    for j in `seq $myday`
    do
        printf "$format2" $(($j+${tdiff[$i]}))
    done
    printf "(%+d)\n" ${tdiff[$i]}
done

Puoi utilizzare per controllare le differenze orarie oggi o in una data futura:

16:08 $ meet
January 22, 2019
Here       08 09 10 11 12 13 14 15 16 17 18 19 20 
Toronto    05 06 07 08 09 10 11 12 13 14 15 16 17 (-3)
Chicago    04 05 06 07 08 09 10 11 12 13 14 15 16 (-4)
Amsterdam  11 12 13 14 15 16 17 18 19 20 21 22 23 (+3)
Dublin     10 11 12 13 14 15 16 17 18 19 20 21 22 (+2)
16:13 $ meet 05-24
May 24, 2019
Here       08 09 10 11 12 13 14 15 16 17 18 19 20 
Toronto    07 08 09 10 11 12 13 14 15 16 17 18 19 (-1)
Chicago    06 07 08 09 10 11 12 13 14 15 16 17 18 (-2)
Amsterdam  13 14 15 16 17 18 19 20 21 22 23 24 25 (+5)
Dublin     12 13 14 15 16 17 18 19 20 21 22 23 24 (+4)
16:13 $ 

HTH


sceneggiatura fantastica! già aggiunto al mio set di strumenti, grazie! pensi che sia possibile eseguire il rendering del tempo in colonne anziché in righe?
cesarpachon,

Può essere. Non vedo un uso per quello, comunque.
Iuri Gavronski,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.