Konversi zona waktu berdasarkan baris perintah

19

Saya tahu tentang http://www.timeanddate.com/worldclock/converter.html

Saya tidak tahu bagaimana cara meminta http://www.google.com dalam format alami yang waras seperti "5pm BST in PST".

Atau apakah saya harus menulis aplikasi seperti itu?

hendry
sumber
Apa maksudmu sebenarnya? Baris perintah linux? Perintah Anda bisa mengetik ke Google? Apa?!
Dal Hundal
baris perintah di shell dan kotak kueri Google sama-sama baris perintah untuk saya
hendry
1
mungkin alat yang lebih baik akan melakukan kota dengan kode bandara, 5pm LHR di SFO
hendry
@hendry dateutils dapat melakukan konversi zona waktu berdasarkan kode bandara iata dan icao: dateconv 2017-05-16T17:00 --from-zone iata:SFO --zone iata:LHR->2017-05-17T01:00:00
hroptatyr

Jawaban:

35

Sekarang jam 6 sore di Taipei, jam berapa sekarang di sini?

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

Pukul 11.00 di sini di London, jam berapa di Taipei?

TZ=Asia/Taipei date -d "11:00 BST"
Fri Jul 16 18:00:00 CST 2010
hendry
sumber
Aneh, tetapi cara pertama tidak bekerja untuk saya: TZ=Europe/Moscow date --date='TZ="Asia/Taipei" 18:00' Mon Mar 27 18:00:00 CST 2017- yaitu hanya memberi tahu saya tanggal di Taipei, bukan tanggal lokal saya untuk titik waktu itu. Meskipun manual mengatakan metode Anda benar. Apakah saya kehilangan sesuatu? .. coreutils 8.26, Arch Linux
MarSoft
Untuk menemukan pengenal zona waktu gunakan sesuatu seperti: timedatectl list-timezones|grep -i taipei(cetak Asia/Taipei), timedatectl list-timezones|grep -i berlin(cetak Europe/Berlin), timedatectl list-timezones|grep -i angeles(cetak America/Los_Angeles)
exebook
5

Contoh ini dari http://www.pixelbeat.org/cmdline.html#dates

Ini memberikan waktu lokal sesuai dengan 9:00 di pantai barat AS, akuntansi untuk transisi penghematan cahaya hari yang berbeda.

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

Gunakan tzselect untuk mendapatkan TZ. Format PST bersifat mendua. IST = Waktu Standar India dan Waktu Musim Panas Irlandia misalnya.

pixelbeat
sumber
2
Tidak tahu tzselect, terima kasih. Jika Anda memasukkan input 'TZ' yang salah, Anda bisa mendapatkan hasil yang menyesatkan, misalnya TZ = London tanggal Jumat 16 Jul 10:28:52 London 2010
hendry
5

Saya pikir ini lebih dekat dengan apa yang diminta OP (Karena dia tidak selalu tahu bahwa BST adalah Taipei? Dan jawabannya tidak menjelaskan bagaimana mendapatkan "Asia / Taipei" dari 'BST').

Pertama tanggal saya sekarang:

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

Maka tanggal yang ingin saya ketahui:

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

Jadi saya tahu itu 5pm BST2 jam lagi.

Saya biasanya lupa jika saya harus menambah atau menghapus dua jam dari waktu EDT jadi saya punya skrip kecil dengan zona waktu umum yang harus saya gunakan:

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

Dan hasilnya:

$ 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

Lokasi yang valid untuk tzskrip Anda dapat ditemukan di sini /usr/share/zoneinfo.

Tapi sekali lagi, untuk saat-saat di masa depan saya hanya menggunakan date -d '<time> <timezone>'.

DavidG
sumber
2

Gunakan Wolfram Alpha . Ke URL dasar ...

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

tambahkan konversi, dengan spasi diganti oleh +. Sebagai contoh:

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

Perhatikan bahwa Wolfram Alpha tampaknya tidak mengenali BSTzona waktu.

gerimis
sumber
bagaimana cara cepat mencari kode zona waktu?
hendry
@hendry Ini adalah peta online interaktif yang keren: timeanddate.com/time/map/#!cities=241
DavidG
1

Saya tahu ini adalah utas lama, tetapi saya membutuhkan kode untuk kasus penggunaan yang sama dan, berdasarkan ide-ide di sini, mengembangkan skrip bash kecil ini:

#!/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

Anda dapat menggunakan untuk memeriksa perbedaan waktu hari ini atau di masa mendatang:

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
sumber
skrip fantastis! sudah ditambahkan ke perangkat saya, terima kasih! Menurut Anda apakah mungkin untuk membuat waktu dalam kolom alih-alih baris?
cesarpachon
Mungkin. Saya tidak melihat ada gunanya untuk itu.
Iuri Gavronski