Linux で昨日の日付を取得する
Bash は、Linux でよく使用されるシェルおよびコマンドライン インターフェイスであり、日付と時刻を操作するための多くの有用なツールと機能を提供します。 この記事では、Linux 上の Bash で昨日の日付を取得するためのいくつかの異なる方法を検討し、日付が DST セーフ (夏時間セーフ) であることを確認する方法についても説明します。
date
コマンドを使用して Linux で昨日の日付を取得する
Bash で昨日の日付を取得する最も簡単な方法の 1つは、date
コマンドを使用することです。 このコマンドを使用すると、現在の日付と時刻の出力をさまざまな方法でフォーマットでき、それを使用して必要な形式で日付を表示できます。
たとえば、YYYY-MM-DD
の形式で昨日の日付を取得するには、次のコマンドを使用できます。
date -d "yesterday" +%F
出力:
2022-11-26
このコマンドは、-d
オプションを使用して日付文字列 (この場合は "yesterday"
) を指定し、+%F
形式指定子を使用して日付を YYYY-MM-DD
形式で出力します。 これは、2022 年 11 月 26 日の 2022-11-26
のように、指定された形式で昨日の日付を返します。
ただし、このアプローチにはいくつかの制限があります。 たとえば、システムのローカル タイム ゾーンに依存し、夏時間 (DST) は考慮されません。
これは、日付が DST 移行期間内にある場合、結果が正確でない可能性があることを意味します。 この問題を解決するには、DST を考慮した別のアプローチを使用できます。
これを行う方法は、date
コマンドで -u
オプションを使用することです。これにより、ローカル タイム ゾーンの代わりに UTC ゾーンを使用するように指示されます。 これにより、固定のタイム ゾーンを使用して日付が計算され、DST 移行に関する問題が回避されます。
このオプションを使用して、YYYY-MM-DD
形式で昨日の日付を取得する例を次に示します。
date -u -d "yesterday" +%F
出力:
2022-11-26
このコマンドは前のコマンドに似ていますが、UTC ゾーンを使用するために -u
オプションが追加されています。 これにより、昨日の日付が指定された形式で返されますが、ローカル タイム ゾーンではなく UTC ゾーンを使用して計算されます。
tz
変数を使用して Linux で昨日の日付を取得する
Bash では、tz
環境変数は標準ではありません。 これは、システムのタイム ゾーンを格納するために使用できるユーザー定義変数です。
この値は、タイムゾーンに依存して日付と時刻を計算または表示するプログラムで使用できます。
たとえば、TZ
変数を "America/Los_Angeles"
や "Europe/Paris"
などのタイム ゾーン文字列に設定して、目的のタイム ゾーンを指定できます。 タイム ゾーン文字列の形式と内容は、使用するシステムとタイム ゾーン データベースによって異なる場合があることに注意してください。
tz
変数と $EPOCHSECONDS
変数を使用して、昨日の日付を取得できます。
printf -v tz '%(%z)T' -1
TZ=$tz printf -v yesterday '%(%Y-%m-%d)T' $(( EPOCHSECONDS - 86400 ))
echo $yesterday
出力:
2022-11-26
このコードは、システムのタイム ゾーンを設定し、前日の日付を指定された形式 (YYYY-MM-DD
) で出力します。 printf
コマンドの -v
フラグは、コマンドの出力を変数 (タイム ゾーンの tz
と前日の日付の yesterday
) に割り当てます。
最初の printf
コマンドの -1
引数は、システムの現在のタイム ゾーンを指定します。 2 番目の printf
コマンドは、TZ
環境変数を使用してタイム ゾーンを設定し、$(( POCHSECONDS - 86400 ))
式を使用して前日の日付をエポック タイム (経過した秒数) で計算します。 1970 年 1 月 1 日以降)。
%(%Y-%m-%d)T
フォーマット文字列は目的の日付形式を指定し、echo
コマンドは日付を端末に出力します。
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn