Conversão de fuso horário por linha de comando

19

Eu sei sobre http://www.timeanddate.com/worldclock/converter.html

Não consigo descobrir como consultar http://www.google.com em um formato natural são como "17:00 BST no PST".

Ou tenho que escrever um aplicativo como esse?

Hendry
fonte
O que você quer dizer exatamente? Linha de comando linux? Comando que você pode digitar no Google? O que?!
Dal Hundal 16/07/10
linha de comando no shell e caixa de consulta do Google estão ambos a uma linha de comando para mim
hendry
1
talvez uma ferramenta melhor faria cidades por códigos de aeroporto, LHR 05:00 em SFO
hendry
dateutils @hendry pode fazer conversão de fuso horário com base na IATA e ICAO códigos de aeroporto: dateconv 2017-05-16T17:00 --from-zone iata:SFO --zone iata:LHR->2017-05-17T01:00:00
hroptatyr

Respostas:

35

São 18:00 em Taipei, que horas são aqui?

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

Às 11 da manhã aqui em Londres, que horas são em Taipei?

TZ=Asia/Taipei date -d "11:00 BST"
Fri Jul 16 18:00:00 CST 2010
Hendry
fonte
Estranho, mas a primeira maneira não funciona para mim: TZ=Europe/Moscow date --date='TZ="Asia/Taipei" 18:00' Mon Mar 27 18:00:00 CST 2017- isto é, apenas me diz a data em Taipei, não a minha data local para esse momento. Embora a página de manual diga que seu método está correto. Estou faltando alguma coisa? .. coreutils 8.26, Arch Linux
MarSoft
Para encontrar um identificador de fuso horário, use algo como: timedatectl list-timezones|grep -i taipei(impressões Asia/Taipei), timedatectl list-timezones|grep -i berlin(impressões Europe/Berlin), timedatectl list-timezones|grep -i angeles(impressões America/Los_Angeles)
exebook
5

Este exemplo é de http://www.pixelbeat.org/cmdline.html#dates

Ele fornece a hora local correspondente às 9h na costa oeste dos EUA, respondendo por diferentes transições de horário de verão.

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

Use tzselect para obter o TZ. O formato PST é ambíguo. IST = Horário Padrão da Índia e Horário de Verão da Irlanda, por exemplo.

pixelbeat
fonte
2
Não sabia tzselect, obrigado. Se você digitar a entrada 'TZ' incorreta, poderá obter resultados enganosos, por exemplo, TZ = data em Londres Sex Jul 16 10:28:52 London 2010
hendry
5

Eu acho que isso está mais próximo do que o OP perguntou (já que ele não necessariamente sabe que o BST é Taipei? E a resposta não explica como chegar a "Ásia / Taipei" no 'BST').

Primeiro minha data atual:

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

Então a data que eu quero saber:

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

Então eu sei que 5pm BSTé de 2 horas de distância.

Normalmente esqueço se tenho que adicionar ou remover duas horas do horário de EDT, para ter um pequeno script com os fusos horários comuns com os quais tenho que trabalhar:

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

E a saída:

$ 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

Locais válidos para o seu tzscript podem ser encontrados aqui /usr/share/zoneinfo.

Mas novamente, para tempos futuros, eu apenas uso date -d '<time> <timezone>'.

DavidG
fonte
2

Use Wolfram Alpha . Para o URL básico…

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

acrescente a conversão, com espaços substituídos por +. Por exemplo:

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

Observe que o Wolfram Alpha não parece reconhecer BSTcomo um fuso horário.

chuvisco
fonte
como procurar rapidamente códigos de fuso horário?
hendry
@hendry Este é um mapa on-line interativo interessante: timeanddate.com/time/map/#!cities=241
DavidG:
1

Eu sei que é um encadeamento antigo, mas precisava de um código para o mesmo caso de uso e, com base nas idéias aqui, desenvolvi esse pequeno 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

Você pode usar para verificar as diferenças de horário hoje ou em uma 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

Iuri Gavronski
fonte
roteiro fantástico! já adicionado ao meu conjunto de ferramentas, obrigado! você acha que é possível renderizar tempo em colunas em vez de linhas?
Cesarpachon
Talvez. Não vejo utilidade para isso, no entanto.
Iuri Gavronski 26/07/19