Conversión de zona horaria por línea de comando

19

Sé acerca de http://www.timeanddate.com/worldclock/converter.html

No puedo entender cómo consultar http://www.google.com en un formato natural sano como "5pm BST en PST".

¿O tengo que escribir una aplicación de este tipo?

hendry
fuente
¿Qué quieres decir exactamente? Línea de comando de linux? ¿Comando que puedes escribir en Google? ¡¿Qué?!
Dal Hundal
la línea de comando en shell y el cuadro de consulta de google son una línea de comando para mí
hendry
1
quizás una mejor herramienta haría ciudades por códigos de aeropuerto, 5pm LHR en SFO
hendry
@hendry dateutils puede hacer la conversión de zona horaria basada en los códigos de aeropuerto de iata e icao: dateconv 2017-05-16T17:00 --from-zone iata:SFO --zone iata:LHR->2017-05-17T01:00:00
hroptatyr

Respuestas:

35

Son las 6pm en Taipei, ¿qué hora es aquí?

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

A las 11 am aquí en Londres, ¿qué hora es en Taipei?

TZ=Asia/Taipei date -d "11:00 BST"
Fri Jul 16 18:00:00 CST 2010
hendry
fuente
Es extraño, pero la primera forma no funciona para mí: TZ=Europe/Moscow date --date='TZ="Asia/Taipei" 18:00' Mon Mar 27 18:00:00 CST 2017es decir, solo me dice la fecha en Taipei, no mi fecha local para ese momento. Aunque la página de manual dice que su método es correcto. ¿Me estoy perdiendo algo? .. coreutils 8.26, Arch Linux
MarSoft
Para encontrar un identificador de zona horaria, utilice algo como: timedatectl list-timezones|grep -i taipei(impresiones Asia/Taipei), timedatectl list-timezones|grep -i berlin(impresiones Europe/Berlin), timedatectl list-timezones|grep -i angeles(impresiones America/Los_Angeles)
exebook
5

Este ejemplo es de http://www.pixelbeat.org/cmdline.html#dates

Proporciona la hora local correspondiente a las 9 AM en la costa oeste de los EE. UU., Lo que representa diferentes transiciones de ahorro de luz diurna.

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

Use tzselect para obtener la TZ. El formato PST es ambiguo. IST = hora estándar india y hora de verano irlandesa, por ejemplo.

pixelbeat
fuente
2
No sabía tzselect, gracias. Si ingresa una entrada 'TZ' incorrecta, puede obtener resultados engañosos, por ejemplo, TZ = fecha de Londres vie 16 de julio 10:28:52 Londres 2010
hendry
5

Creo que esto está más cerca de lo que preguntó el OP (¿Ya que él no necesariamente sabe que BST es Taipei? Y la respuesta no explica cómo llegar a "Asia / Taipei" desde 'BST').

Primero mi fecha actual:

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

Entonces la fecha que quiero saber:

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

Entonces sé que 5pm BSTestá a 2 horas de distancia.

Por lo general, olvido si tengo que agregar o quitar dos horas de EDT, así que tengo un pequeño script con las zonas horarias comunes con las que tengo que trabajar:

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

Y la salida:

$ 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

Las ubicaciones válidas para su tzscript se pueden encontrar aquí /usr/share/zoneinfo.

Pero, de nuevo, para los tiempos en el futuro solo uso date -d '<time> <timezone>'.

DavidG
fuente
2

Usa Wolfram Alpha . A la URL básica ...

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

agregue la conversión, con espacios reemplazados por +. Por ejemplo:

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

Tenga en cuenta que Wolfram Alpha no parece reconocer BSTcomo una zona horaria.

drizzt
fuente
¿Cómo buscar rápidamente los códigos de zona horaria?
hendry
@hendry Este es un mapa interactivo en línea: timeanddate.com/time/map/#!cities=241
DavidG
1

Sé que es un hilo viejo, pero necesitaba un código para el mismo caso de uso y, basado en las ideas aquí, desarrollé este pequeño 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

Puede usar para verificar las diferencias horarias hoy o en una fecha 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
fuente
guión fantástico! ya agregado a mi conjunto de herramientas, gracias! ¿Crees que es posible representar el tiempo en columnas en lugar de filas?
cesarpachon
Tal vez. Sin embargo, no veo un uso para eso.
Iuri Gavronski