Ubuntu 20.04およびCentOS 7で、「昨日」(1日前に理解されている)に対応する日付文字列を取得しようとしています。これまでは存在しなかったタイムゾーン(例:)を正常に使用し、aaa
24時間オフセットを適用しました。つまり、私が実行したいコマンドは次のようになります。
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
これはキューバに限定されない。夏時間を守るすべてのタイムゾーンは、時計が前方に移動する日に適用されます。
答え2
タイムゾーンを使用してこれを行う方法はわかりませんが、24時間前の日付は次のように表示されることがあります。
date -d @$(($(date +%s)-24*3600))
これは現在の日付を1970年以降の秒数で表してからdate +%s
24時間を引いたものです。date -d
現在の日付は表示されませんが、次の文字列で定義された日付が表示されます。