bash でタイムスタンプ文字列のタイムゾーンを変換する

bash でタイムスタンプ文字列のタイムゾーンを変換する

ファイル名から抽出された日付/時刻文字列があります。タイムスタンプはタイムゾーン A を使用して書き込まれたことがわかっているので、さらに処理するにはタイムゾーン B に変換する必要があります。これは bash で可能ですか?

例えば:

filenameTimestamp="2015-01-20 18:05:02"
timezoneA="Australia/Sydney"
timezoneB="Australia/Brisbane"

タイムゾーン A を使用して文字列を解析し、タイムゾーン B を使用して再度文字列に出力する必要があると思います。

答え1

シドニーの日付を米国ロサンゼルスの日付に解釈するには、次のようにします。

$ sec=$(TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02")
$ TZ="America/Los_Angeles" date -d "@$sec"
Wed May 20 01:05:02 PDT 2015

ブリスベンの結果は次のとおりです。

$ TZ="Australia/Brisbane" date -d "@$sec"
Wed May 20 18:05:02 AEST 2015

使い方

  • TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02"

    これにより、タイムゾーンが一時的にシドニーに設定され、日付「2015-05-20 18:05:02」がエポック (UTC) からの秒数に変換されます。

  • sec=$(TZ="Australia/Sydney" date +'%s' -d "2015-05-20 18:05:02")

    これにより、エポック (UTC) からの秒数がシェル変数に保存されますsec

  • TZ="America/Los_Angeles" date -d "@$sec"

    これにより、タイムゾーンが一時的にロサンゼルスに設定され、 によって指定された日付が解釈されますsec

関連情報