日付:別のタイムゾーンの文字列の日付-dが無効です。

日付:別のタイムゾーンの文字列の日付-dが無効です。

サーバーは東部タイムゾーンに設定されています。私の仕事のいくつかはそのタイムゾーンに関連し、いくつかはオーストラリア/アデレードのタイムゾーンに関連しています。

$ DATE=`date`
$ echo $DATE
Mon Mon Jun 4 15:15:47 EDT 2018
$ DATE_Adelaide=`TZ=Australia/Adelaide date -d "$DATE"`
$ echo $DATE_Adelaide
Tue Jun 5 04:45:47 ACST 2018
$ dayName=$(date -d "${DATE_Adelaide}" +%a)
date: invalid date `Tue Jun 5 04:45:47 ACST 2018'

答え1

ISO8601の日付/時刻形式を汎用転送形式として使用してGNU日付を想定すると、次のようになります。

$ date_local=$(date --iso-8601=seconds)
$ echo "$date_local"
2018-06-04T17:01:45-04:00

$ date_adelaide=$(TZ=Australia/Adelaide date -d "$date_local" --iso-8601=seconds)
$ echo "$date_adelaide"
2018-06-05T06:31:45+09:30

$ day_name_local=$(date -d "$date_adelaide" +%a)
$ echo $day_name_local
Mon

$ day_name_adelaide=$(TZ=Australia/Adelaide date -d "$date_adelaide" +%a)
$ echo $day_name_adelaide
Tue

答え2

私のシステムがオーストラリア/アデレードタイムゾーンに日付を変換し、その後の「日付」コマンドで変換された日付を使用しようとすると、私のシステムの何かによってACSTが正しく解釈されません。私の解決策は、目的の時間に変換しながら日付のフォーマットされた部分を出力することでした。 DATE=$(日付) $ echo $DATE 2018年6月5日火曜日 14:13:03 EDT $ TZ=オーストラリア/アデレード日付 -d "$DATE" 6月6日水曜日 03:43:03 ACST 2018 $ dayName =$ (TZ=オーストラリア/アデレード日付-d "$DATE" +%a) $ dayofmonth=$(TZ=オーストラリア/アデレード日付-d "$DATE" +%d) $ dayofweek=$(TZ =オーストラリア/アデレード日付-d "$DATE" +%w) $ 時間=$(TZ=オーストラリア/アデレード日付-d "$DATE" +%H) $分=$(TZ=オーストラリア/アデレード日付-d "$DATE" + %M) echo $dayName $dayofmonth $dayofweek $hour$分 水曜日 06 3 03 43

関連情報