【Linuxコマンド入門】dateコマンドを徹底解説!システム・ハードウェアクロックから活用事例まで
※ 当ページには【広告/PR】を含む場合があります。
2020/12/28
2025/07/18

目次
- 1. dateコマンドの基本をマスターする
- 2. Alpine Linux (BusyBox) のdateコマンドの注意点
- 3. Linuxにおけるシステムクロックとハードウェアクロックの違い
- 3-1. ハードウェアクロックの時間の変更方法
- 3-1-1. `hwclock`でハードウェアクロックを変更する
- ハードウェアクロックを表示
- システムクロックをハードウェアクロックに同期
- ハードウェアクロックをシステムクロックに同期
- 3-1-2. `timedatectl`でハードウェアクロックを変更する
- 現在の状態を表示
- 日付と時刻を設定
- タイムゾーンを設定
- NTP同期を有効/無効にする
- 3-1-1. `hwclock`でハードウェアクロックを変更する
- 3-1. ハードウェアクロックの時間の変更方法
- 4. dateコマンド活用事例
- 5. まとめ
date
date
date
date
date
dateコマンドの基本をマスターする
date
$ date
Thu Jul 17 10:30:00 JST 2025
特定のフォーマットで日時を表示する
+
フォーマット指定子 | 説明 | 例 (2025年7月17日 10:30:00の場合) |
---|---|---|
`%Y` | 西暦 (4桁) | 2025 |
`%m` | 月 (2桁、01-12) | 07 |
`%d` | 日 (2桁、01-31) | 17 |
`%H` | 時 (24時間表記、00-23) | 10 |
`%M` | 分 (2桁、00-59) | 30 |
`%S` | 秒 (2桁、00-59) | 00 |
`%s` | エポック秒 (UNIX時間) | 1721218200 |
`%F` | 完全な日付フォーマット (YYYY-MM-DD) | 2025-07-17 |
`%T` | 完全な時刻フォーマット (HH:MM:SS) | 10:30:00 |
`%A` | 曜日のフルネーム | Thursday |
`%a` | 曜日の省略名 | Thu |
`%B` | 月のフルネーム | July |
`%b` | 月の省略名 | Jul |
`%j` | 年の通算日 (001-366) | 198 |
`%Z` | タイムゾーン名 | JST |
`%z` | タイムゾーンのオフセット (+HHMM) | +0900 |
$ date "+%Y年%m月%d日 %H時%M分%S秒"
2025年07月17日 10時30分00秒
エポック秒 (UNIX時間) との変換
エポック秒を取得する
%s
$ date +%s
1721218200
エポック秒から日付に変換する
@
-d
--date
date
$ date -d @1721218200
Thu Jul 17 10:30:00 JST 2025
特定の日付や時刻を指定して表示する
-d
--date
date
$ date -d "2024-01-01 12:30:00"
Mon Jan 1 12:30:00 JST 2024
$ date -d "yesterday"
$ date -d "tomorrow"
$ date -d "next Monday"
$ date -d "1 week ago"
$ date -d "2 days next week"
$ date -d "last Friday"
Alpine Linux (BusyBox) のdateコマンドの注意点
date
-d
日付文字列のフォーマット制限
date
-d
"YYYY/MM/DD hh:mm:ss"
$ date -d "2019/07/01 12:00:00"
date: invalid date '2019/07/01 12:00:00'
date --version
$ date --version
BusyBox v1.29.3 (2019-01-24 07:45:07 UTC) multi-call binary.
...
Recognized TIME formats:
hh:mm[:ss]
[YYYY.]MM.DD-hh:mm[:ss]
YYYY-MM-DD hh:mm[:ss]
[[[[[YY]YY]MM]DD]hh]mm[.ss]
'date TIME' form accepts MMDDhhmm[[YY]YY][.ss] instead
YYYY-MM-DD
$ date -d "2018-03-13"
Tue Mar 13 00:00:00 UTC 2018
+
$ date -d "2018-03-13" "+%Y年%m月%d日"
2018年03月13日
相対的な時刻操作の代替策
date
-d "1 day ago"
$ date -d "-1day"
date: invalid date '-1day'
1日分の秒数(60秒 * 60分 * 24時間 = 86400秒)
#1日前の時刻
$ date -d "@$(($(date +%s) - 60*60*24))"
Tue Dec 28 07:36:58 UTC 2021 (例)
#7時間後の時刻
$ date -d "@$(($(date +%s) + 60*60*7))"
Wed Dec 29 14:41:45 UTC 2021 (例)
Linuxにおけるシステムクロックとハードウェアクロックの違い
1. **システムクロック (System Clock / Software Clock)**:
* OSが管理するソフトウェア上の時計
* システム起動時にハードウェアクロックから時刻を読み込み、その後は独立して動作
* NTP (Network Time Protocol) などのサービスによって、
インターネット上のタイムサーバーと同期され、常に正確な時刻を保つことが一般的
* `date`コマンドで表示・設定するのは、このシステムクロック
2. **ハードウェアクロック (Hardware Clock / Real Time Clock - RTC)**:
* マザーボード上のCMOSチップに搭載されている物理的な時計
* システムの電源がオフになっても、バッテリーによって時間を保持
* BIOS/UEFI設定画面で確認・変更できる時計
* `hwclock`や`timedatectl`コマンドで操作
date
ハードウェアクロックの時間の変更方法
date
hwclock
timedatectl
`hwclock`でハードウェアクロックを変更する
hwclock
ハードウェアクロックを表示
$ sudo hwclock --show
システムクロックをハードウェアクロックに同期
$ sudo hwclock --systohc
ハードウェアクロックをシステムクロックに同期
$ sudo hwclock --hctosys
`timedatectl`でハードウェアクロックを変更する
timedatectl
現在の状態を表示
$ timedatectl status
日付と時刻を設定
$ sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"
$ sudo timedatectl set-time "2025-07-17 15:00:00"
タイムゾーンを設定
$ sudo timedatectl set-timezone Asia/Tokyo
NTP同期を有効/無効にする
$ sudo timedatectl set-ntp true
$ sudo timedatectl set-ntp false
dateコマンド活用事例
date
dateコマンドとシェル変数による文字列置換
date
YYYY/MM/DD
YYYY-MM-DD
date
sed
${parameter//pattern/string}
#!/bin/bash
that_date="2018/03/13"
#スラッシュをハイフンに置換
dt=$(date -d "${that_date//\//-}" "+%Y年%m月%d日")
echo $dt
$ chmod +x that_date.sh
$ ./that_date.sh
2018年03月13日
sed
awkコマンドの中でdateを使うテクニック
awk
date
1,3.14,2018-03-30,taco
$ echo '1,3.14,2018-03-30,taco' | awk -F"," '
function _parse_epochtime(rawtime) {
# 日付フォーマットをdateで使える形式に変換(例: / を - に置換)
gsub("/", "-", rawtime);
# Awk内部で外部コマンドを呼び出す
cmd="date -u --date=\""rawtime" 00:00:00\" +\"%s\"";
cmd | getline parsed_time
close(cmd) # getlineで呼び出した外部コマンドは明示的に閉じる
return parsed_time;
}
BEGIN{
OFS = ","; # 出力フィールドセパレータをカンマに設定
}
{
epochtime = _parse_epochtime($3); # 3列目の日付をエポック秒に変換
print $1,$2,epochtime,$4 # 変換したエポック秒を出力
}
'
#出力
1,3.14,1522368000,taco
awk
""
getline
close(cmd)
当年の一月一日からの今日までの日数を計算する
date
#経過日数
$ echo $(( ($(date -u +%s) - $(date -u -d "2021-01-01" +%s))/86400 ))
231 (例)
bc -l
#年消化率
$ echo "($(date -u +%s) - $(date -u -d "2021-01-01" +%s))/86400/365" | bc -l
.64193380272633744855 (例)
まとめ
date
date
hwclock
timedatectl
date
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー