Linuxスクリプトや自動化において、昨日の日付を取得することはよくある作業です。このガイドでは、組み込みのdate
コマンドを使用した2つの信頼性の高い方法を紹介し、タイムゾーンの処理に関する考慮事項について説明します。
目次
date
コマンドの使用
最も簡単な方法は、date
コマンドの組み込みの「昨日」機能を直接使用することです。
date -d "yesterday" +%Y-%m-%d
このコマンドは、以下のとおりです。
date
: dateコマンドを呼び出します。-d "yesterday"
: 昨日の日付を指定します。+%Y-%m-%d
: 出力をYYYY-MM-DD形式でフォーマットします。(例:+%F
,+%Y/%m/%d
,+%d/%m/%Y
などでカスタマイズできます)。
例: 今日が2024-10-27の場合、出力は2024-10-26
となります。
より正確なタイムゾーンの処理
異なるタイムゾーン間で正確な日付計算が必要なスクリプトの場合、より堅牢な方法が必要です。前述の方法で通常は十分ですが、サマータイムの切り替えにより不整合が生じる可能性があります。この改良されたアプローチはエポック時間を使用します。
date -d "@$(($(date +%s) - 86400))" +%Y-%m-%d
このコマンドは、以下のとおりです。
date +%s
: エポック(1970年1月1日00:00:00 UTC)からの経過秒数を取得します。$(...)
: コマンド置換で、内部コマンドの出力を取得します。- 86400
: 86400秒(1日)を引きます。@(...)
:date
に先行する値をエポックからの経過秒数として解釈させます。date -d "..." +%Y-%m-%d
: 結果のエポック時間をYYYY-MM-DD形式でフォーマットします。
この方法は、エポック時間を直接操作することで、タイムゾーン関連の曖昧さを回避し、精度を確保します。
ほとんどの場合、date -d "yesterday"
を使用する最初の方法は十分です。ただし、重要なアプリケーションやタイムゾーンを跨ぐスクリプトでは、2番目の方法の方が信頼性の高いソリューションとなります。出力形式は、それぞれの要件に合わせて調整してください。