あるシステムでは日付が無効ですが、別のシステムでは完全に有効ですか?

あるシステムでは日付が無効ですが、別のシステムでは完全に有効ですか?

私のコードは開始時刻を使用し、その開始時刻で異なる日付/時刻変数を定義します。このように:

shour=$(date -d "yesterday 3PM" -u)

dd=$(date "+%d" -d "$shour" -u) 

sdate=$(date "+%Y%m%d" -d "$shour" -u)

これは返されます。

date: invalid date 'Thu 16 Jan 15:00:00 UTC 2020'
date: invalid date 'Thu 16 Jan 15:00:00 UTC 2020'

このため私の髪を引っ張ってください!

答え1

dateデフォルト出力を読み取れません。Thu 16 Jan 15:00:00 UTC 2020

date再処理する出力は、dateフォーマット文字列を使用して出力フォーマットを指定する必要があります'+%F %T'

答え2

今年はランキングが問題になると思います。失敗しても:

host:~ # date -d 'Thu 16 Jan 15:00:00 UTC 2020' 
date: invalid date ‘Thu 16 Jan 15:00:00 UTC 2020

これは私の仮想マシンで動作します。

host:~ # date -d 'Thu 16 Jan 2020 15:00:00 UTC' 
Thu Jan 16 16:00:00 CET 2020

最初の文に日付形式を追加しましたが、これはうまくいくようです。

shour=$(date "+%Y%m%d" -d "yesterday 3PM" -u)
ddate="$(date -d "${shour}" -u)"
sdate=$(date "+%Y%m%d" -d "$shour" -u)

答え3

試してみるためdateのオプション-R

   -R, --rfc-email
          output date and time in RFC 5322 format.  Example: Mon, 14 Aug 2006 02:34:56 -0600
date -d "yesterday 3PM" -R
Thu, 16 Jan 2020 15:00:00 +0100
date -d "$(date -d "yesterday 3PM" -R)" +%s
1579183200

関連情報