シェルスクリプトでロケールを指定し日付や時刻、曜日を取得する方法

目次

スポンサードリンク

この記事では、dateコマンドを使って日付や時刻を指定した書式で取得する方法を解説します。指定する書式によってはロケールが関係するためロケールの指定方法も解説します。

日付や時刻、曜日を取得する方法

dateコマンドで書式(フォーマット)を指定する基本的な構文は以下です。

date -d 'yyyy/mm/dd' +'format'

-d オプションで任意の日付を指定することができます。指定しない場合は現在時刻を取得することになります。

+‘format’ の部分で書式を指定します。使用できる書式は多岐にわたるので一例をあげます。man date コマンドでより詳細なドキュメントも確認することができます。

以下は主要な書式と説明です。

1. 年
%Y: 4桁の年。例:2024
%y: 下2桁の年。例:24

2. 月
%m: 2桁の月。例:05
%b: 3文字の略月。例:Jan
%B: フルネームの月。例:January

3. 日
%d: 2桁の日付。例:26
%j: 年始からの経過日数。例:157

4. 曜日
%a: 3文字の略曜日。例:Sun
%A: フルネームの曜日。例:Sunday

5. 時間
%H: 24時間表記の hour。例:08
%I: 12時間表記の hour。例:08
%p: AM/PM。例:AM
%M: 2桁の分。例:12
%S: 2桁の秒。例:34

6. 複合フォーマット
%Y-%m-%d: 2024-05-26 

7. その他
%Z: タイムゾーン名。例:JST
%+: UTC オフセット (例:+09:00)
@: UNIX 時間 (1970年1月1日 00:00:00 UTC からの経過秒数)

サンプルコード

以下サンプルコードでは、ロケールを「ja_JP.UTF-8」に変更しています。 その後、dateコマンドの -d オプションで日付を指定し、書式指定「+‘%A’」で曜日を取得しています。

#!/bin/bash

export LC_ALL=ja_JP.UTF-8

date -d '2024/05/26' +'%Y-%m-%d %A'

exit 0

サンプルコードの実行結果です。date1.sh という名前で保存し実行しています。

ロケールを指定することで日本語で曜日を取得できています。 また、シェルスクリプト内でのロケール指定による影響は、スクリプトの実行時に限定され、システムのロケール指定には影響していないことも確認できます。

[root@133-130-122-109 tmp]# ./date1.sh
2024-05-26 日曜日
[root@133-130-122-109 tmp]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=


シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。

Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】 icon