ローカルタイムゾーンにタイムゾーンオフセットを追加する

ローカルタイムゾーンにタイムゾーンオフセットを追加する

Ubuntu 20.04およびCentOS 7で、「昨日」(1日前に理解されている)に対応する日付文字列を取得しようとしています。これまでは存在しなかったタイムゾーン(例:)を正常に使用し、aaa24時間オフセットを適用しました。つまり、私が実行したいコマンドは次のようになります。

YESTERDAY=`TZ=aaa24 date '+%y%m%d'`

日付が私のタイムゾーンに合わないという事実に気づくまでは大丈夫です。
正しいタイムゾーン(私の場合はヨーロッパ/ローマ)を適用しようとしましたが、正しく機能しませんでした。具体的には:

TZ="Europe/Rome" date "+%Y%m%d %H:%M %Z"
20210208 08:25 CET
TZ="Europe/Rome24" date "+%Y%m%d %H:%M %Z"
20210208 07:25 Europe

最後のコマンドに公開されたタイムゾーンは、タイムゾーンを正しく理解していないように聞こえたり、オフセットを無視してGMTと同期したように見えるデフォルトの「ヨーロッパ」タイムゾーンを使用しているようです。

「サブゾーン」を削除していくつかの試みを試みましたが、/Romeこの場合はタイムゾーンオフセットが正しく理解されているようです。

TZ="Europe" date "+%Y%m%d %H:%M %Z"
20210208 07:25 Europe
TZ="Europe24" date "+%Y%m%d %H:%M %Z"
20210207 07:25 Europe

ヨーロッパ/ローマなどの特定の「サブ」タイムゾーンにオフセットを適用する方法はありますか?ありがとうございます。

ベストアンサー1

UbuntuとCentOSの両方がGNU Dateを使用しているため、次の-dオプションを使用してください。

 $ date "+%Y%m%d %H:%M %Z"
20210209 10:09 EST

$ date -d "yesterday" "+%Y%m%d %H:%M %Z"
20210208 10:09 EST

dateパラメータを解析する方法の詳細については、次を-d参照してくださいinfo date(またはオンライン)


ちなみに時間が変です。特に夏時間:キューバでは今年(2021年)3月14日深夜に夏時間の切り替えが発生します。その真夜中は存在しませんでした。:

$ env TZ=America/Havana date -d '2021-03-14'
date: invalid date ‘2021-03-14’

# but
$ env TZ=America/Havana date -d '2021-03-14 01:00:00'
Sun Mar 14 01:00:00 CDT 2021

日単位の日付操作は、時間単位の日付操作と異なる場合があります。 3月15日に移動してから時間を逆にしてみましょう。

$ env TZ=America/Havana date -d '2021-03-15' '+%Y-%m-%d'
2021-03-15

$ env TZ=America/Havana date -d '2021-03-15 -1 day' '+%Y-%m-%d'
2021-03-14

$ env TZ=America/Havana date -d '2021-03-15 -24 hours' '+%Y-%m-%d'
2021-03-13

なぜそんなことですか? 2021年3月14日キューバには23時間があるので、24時間を除くと1日1時間になります。

$ env TZ=America/Havana date -d '2021-03-15' '+%Y-%m-%d %T'
2021-03-15 00:00:00

$ env TZ=America/Havana date -d '2021-03-15 -1 day' '+%Y-%m-%d %T'
2021-03-14 01:00:00

$ env TZ=America/Havana date -d '2021-03-15 -24 hours' '+%Y-%m-%d %T'
2021-03-13 23:00:00

これはキューバに限定されない。夏時間を守るすべてのタイムゾーンは、時計が前方に移動する日に適用されます。

おすすめ記事