web-dev-qa-db-ja.com

コマンドラインによるタイムゾーン変換

私は http://www.timeanddate.com/worldclock/converter.html について知っています

「5pm BST in PST」のような健全な自然形式で http://www.google.com をクエリする方法がわかりません。

それとも私はそのようなアプリを書かなければなりませんか?

21
hendry

台北は午後6時です。何時にしますか?

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

ここロンドンで午前11時、それは台北で何時ですか?

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

これはOPが尋ねたものに近いと思います(彼はBSTが台北であることを必ずしも知っているわけではないので、答えは「BST」から「アジア/台北」に行く方法を説明していません)。

まず私の現在の日付:

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

次に、知りたい日付:

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

つまり、5pm BSTは2時間離れていることを知っています。

私は通常、EDT時間に2時間を追加または削除する必要があるかどうかを忘れるので、処理する必要がある一般的なタイムゾーンを含む小さなスクリプトがあります。

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

そして出力:

$ 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

tzスクリプトの有効な場所は、ここ/usr/share/zoneinfoにあります。

ただし、繰り返しになりますが、将来的にはdate -d '<time> <timezone>'を使用します。

7
DavidG

この例は http://www.pixelbeat.org/cmdline.html#dates からのものです

米国西海岸の午前9時に対応する現地時間を提供し、さまざまな日光の移行を説明します。

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

Tzselectを使用してTZを取得します。 PST形式があいまいです。 IST =インド標準時、アイルランド夏時間など。

6
pixelbeat

Wolfram Alpha を使用します。基本的なURLへ…

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

スペースを+に置き換えて、変換を追加します。例えば:

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

Wolfram AlphaはBSTをタイムゾーンとして認識していないようです。

2
drizzt

私はそれが古いスレッドであることを知っていますが、同じユースケースのコードが必要であり、ここのアイデアに基づいて、この小さな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

を使用して、今日または将来の日付の時差をチェックできます。

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

1
Iuri Gavronski