UNIXのdateコマンドについて
`date`コマンドは、
UNIX系
オペレーティングシステムにおいて、現在の日時を表示したり、
システム時刻を設定したりするために使用されるコマンドです。このコマンドは、
標準Cライブラリの`gettimeofday()`関数を利用して
システム時刻を取得し、タイムゾーン情報に基づいて変換して表示します。
システム時刻の調整には、通常
スーパーユーザー権限が必要となります。
基本的な使い方
`date`コマンドをオプションなしで実行すると、現在の日時が以下のような形式で表示されます。
$ date
Fri Jul 27 14:12:06 EDT 2007
この表示形式は、曜日、月、日、時間、タイムゾーン、年の順に表示され、月と曜日は省略形です。表示されるタイムゾーンは、システムに設定されているタイムゾーンに基づきます。
表示形式の変更
`date`コマンドでは、`+`記号に続けてフォーマット文字列を指定することで、表示形式をカスタマイズできます。以下は主なフォーマット指定子です。
`%Y`: 年(4桁)
`%m`: 月(2桁)
`%d`: 日(2桁)
`%H`: 時(24時間表示)
`%M`: 分
`%S`: 秒
例えば、`date +%Y/%m/%d`とすると、`2023/10/27`のように表示されます。
オプション
`date`コマンドには、以下のような様々なオプションがあります。
`-d, --date=string`: 文字列で指定された日時を表示します。例えば、`date -d "2 days ago"`とすると、2日前の日時が表示されます。
`-s, --set=string`: 文字列で指定された日時に
システム時刻を設定します。設定には
スーパーユーザー権限が必要です。
`-u,
utc, universal`: UTC(
協定世界時)で日時を表示または設定します。
`-I[TIMESPEC], --iso-8601[=TIMESPEC]`:
ISO 8601形式で日時を表示します。`TIMESPEC`には`hours`, `minutes`, `seconds`を指定できます。
`-R, --rfc-822`: RFC 822形式で日時を表示します。
`--help`: ヘルプを表示します。
タイムゾーンの設定
`date`コマンドの出力は、
環境変数`TZ`でタイムゾーンを指定できます。`TZ`が設定されていない場合は、`/etc/localtime`の設定が使用されます。また、コマンドラインで`-u`オプションを指定すると、UTCで表示・設定できます。
システム時刻を設定するには、`-s`オプションを使用し、`MMddhhmm[[cc]yy]`形式で日時を指定します。ここで、`MM`は月、`dd`は日、`hh`は時、`mm`は分を表します。`cc`は年の先頭2桁、`yy`は年の後半2桁です。例えば、`date -s 1027120023`は、2023年10月27日12時00分に設定します。
実用例
特定の日付の表示
date -d "2024-01-15" +"%Y年%m月%d日"
結果例: `2024年01月15日`
昨日と明日の日付表示
date -d yesterday +%Y%m%d
date -d tomorrow +%Y%m%d
UNIX時間(エポック秒)の表示
date +%s
UNIX時間から可読な形式への変換
date -d "@1678886400"
注意点
`date`コマンドの実装は
Unix系OSによって異なり、移植性に注意が必要です。
システム時刻の設定には
スーパーユーザー権限が必要となります。
環境変数`TZ`と`-u`オプションの組み合わせで、表示するタイムゾーンを制御できます。
フォーマット文字列を利用することで、日付・時刻の表示形式を柔軟にカスタマイズできます。
その他のコマンドとの連携
`date`コマンドは、シェルスクリプトなどで他のコマンドと組み合わせて使用されることがよくあります。例えば、ログファイルの名前の一部に現在の日時を含めたり、cronジョブで特定の日時に処理を実行する際などに活用できます。
bash
LOG_FILE="log_$(date +%Y%m%d).txt"
echo "ログファイルを作成しました: $LOG_FILE"
関連コマンド
`adjtimex`:
Linux環境で
システム時刻を調整するコマンド。
`hwclock`: ハードウェアクロック(RTC)を操作するコマンド。RTCと
システム時刻を同期させるのに使われます。
* `cron`: スケジュールされたタスクを定期的に実行するデーモンです。
これらの情報を活用して、`date`コマンドを効果的に活用してください。