Konwersja strefy czasowej według wiersza poleceń


20

Wiem o http://www.timeanddate.com/worldclock/converter.html

Nie mogę wymyślić, jak wykonać zapytanie do http://www.google.com w rozsądnym naturalnym formacie, takim jak „17:00 czasu PST w PST”.

Czy muszę napisać taką aplikację?


Co miałeś dokładnie na myśli? Linux z linii poleceń? Polecenie, które możesz wpisać w Google? Co?!
Dal Hundal

wiersz poleceń w powłoce i pole zapytania Google są dla mnie zarówno wierszem poleceń
hendry

1
być może lepszym narzędziem byłoby zrobienie miast według kodów lotniskowych, 17:00 LHR w SFO
hendry

@hendry dateutils może dokonać konwersji strefy czasowej na podstawie kodów portów lotniczych Iata i icao: dateconv 2017-05-16T17:00 --from-zone iata:SFO --zone iata:LHR->2017-05-17T01:00:00
hroptatyr

Odpowiedzi:


38

W Tajpej jest 18:00, która jest tutaj godzina?

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

O 11 rano tutaj w Londynie, która jest godzina w Tajpej?

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

Dziwne, ale pierwszy sposób nie działa dla mnie: TZ=Europe/Moscow date --date='TZ="Asia/Taipei" 18:00' Mon Mar 27 18:00:00 CST 2017- tzn. Po prostu podaje mi datę w Tajpej, a nie moją lokalną datę dla tego punktu czasowego. Chociaż strona twierdzi, że Twoja metoda jest poprawna. Czy coś brakuje? coreutils 8.26Arch Arch Linux
MarSoft

Aby znaleźć identyfikator strefy czasowej, użyj czegoś takiego jak: timedatectl list-timezones|grep -i taipei(wydruki Asia/Taipei), timedatectl list-timezones|grep -i berlin(wydruki Europe/Berlin), timedatectl list-timezones|grep -i angeles(wydruki America/Los_Angeles)
exebook

6

Ten przykład pochodzi z http://www.pixelbeat.org/cmdline.html#dates

Podaje czas lokalny odpowiadający 9 rano na zachodnim wybrzeżu USA, co odpowiada różnym przejściom oszczędności światła dziennego.

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

Użyj tzselect, aby uzyskać TZ. Format PST jest niejednoznaczny. IST = na przykład indyjski czas standardowy i irlandzki czas letni.


3
Nie wiedziałem o tym tzselect, dzięki. Jeśli wpiszesz nieprawidłowe „TZ”, możesz uzyskać mylące wyniki, np. TZ = data w Londynie pt. 16 lipca 10:28:52 Londyn 2010
hendry

6

Myślę, że jest to bliższe pytaniu OP (skoro niekoniecznie wie, że BST to Tajpej? A odpowiedź nie wyjaśnia, jak dostać się do „Asia / Taipei” z „BST”).

Najpierw moja aktualna data:

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

Następnie data, którą chcę znać:

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

Wiem, że 5pm BSTto za 2 godziny.

Zazwyczaj zapominam, czy muszę dodać lub usunąć dwie godziny z czasów EDT, więc mam mały skrypt z typowymi strefami czasowymi, z którymi muszę pracować:

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

A wynik:

$ 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

Prawidłowe lokalizacje tzskryptu można znaleźć tutaj /usr/share/zoneinfo.

Ale znowu, dla czasów w przyszłości po prostu używam date -d '<time> <timezone>'.


2

Użyj Wolfram Alpha . Do podstawowego adresu URL…

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

dołącz konwersję, spacje zastąpione przez +. Na przykład:

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

Zauważ, że Wolfram Alpha nie wydaje się rozpoznawać BSTjako strefy czasowej.


jak szybko wyszukać kody stref czasowych?
hendry

@hendry To jest fajna interaktywna mapa online: timeanddate.com/time/map/#!cities=241
DavidG

1

Wiem, że to stary wątek, ale potrzebowałem kodu dla tego samego przypadku użycia i, w oparciu o pomysły tutaj, opracowałem ten mały skrypt 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

Możesz użyć do sprawdzenia różnic czasowych dzisiaj lub w przyszłości:

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


fantastyczny skrypt! już dodany do mojego zestawu narzędzi, dzięki! czy uważasz, że można renderować czas w kolumnach zamiast w wierszach?
cesarpachon

Może. Jednak nie widzę w tym zastosowania.
Iuri Gavronski
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.