macOS の不正な date の出力結果を修正する

ある日から、macOS の date コマンドの出力結果が「#午後」になってしまいました。
/usr/share/locale/ 以下にあるロケールファイルがおかしくなっているようです。
しかしこのディレクトリはそのままでは sudo コマンドを使っても書き換えることができません。
以下にこの修正方法を記載します。

1. 日本語を諦める

一番簡単な方法で、日本語ロケールファイルの問題のため、英語にしてしまえば解決します。

LANG=C date

LC_ALL で設定している場合はそちらの方が強いので、LC_ALL を変更してください。

LC_ALL=C date

2. 独自のロケールファイルを設定する

ロケールファイルの場所は環境変数 PATH_LOCALE で設定可能なので、編集可能な場所にロケールファイルをコピーして修正し、PATH_LOCALE を設定してあげると解決します。

ロケールファイルのコピー

まずはファイルのコピーです。
ja_JP.UTF-8 からシンボリックリンクでいくつか別のファイルを参照しているので、そちらも一緒にコピーします。

mkdir ~/.config/locale
cp -R /usr/share/locale/ja_JP.UTF-8 ~/.config/locale/
cp -R /usr/share/locale/C.UTF-8 ~/.config/locale/
cp -R /usr/share/locale/en_US.UTF-8 ~/.config/locale/

ロケールファイルの修正

~/.config/locale/ja_JP.UTF-8/LC_TIME を編集します。
以下は「cat -n LC_TIME」コマンドの出力結果の一部ですが、42行目から45行目がおかしくなっています。
午前午後の表示をコメントアウトして AM PM にしたかったのでしょうか……。謎ですね。

    40  %Y/%m/%d
    41  %a %b/%e %T %Y
    42  #午前
    43  AM
    44  #午後
    45  PM
    46  %Y年 %B%e日 %A %X %Z
    47  1月
    48  2月
    49  3月

42行目を「#午前」から「午前」、44行目を「#午後」から「午後」に変更してください。
また、43行目と45行目を削除してください。
以下のようになります。

    40  %Y/%m/%d
    41  %a %b/%e %T %Y
    42  午前
    43  午後
    44  %Y年 %B%e日 %A %X %Z
    45  1月
    46  2月
    47  3月
    48  4月
    49  5月

これを見ると分かりますが、日本語の date の出力フォーマットが44行目にあって、本来は「%Y年 %B%e日 %A %X %Z」を与えられるはずが今回は行がズレて「#午後」になったのですね。

念のため、diff -u /usr/share/locale/ja_JP.UTF-8/LC_TIME ~/.config/locale/ja_JP.UTF-8/LC_TIME の結果も併せて掲載しておきます。

@@ -39,10 +39,8 @@
 %H時%M分%S秒
 %Y/%m/%d
 %a %b/%e %T %Y
-#午前
-AM
-#午後
-PM
+午前
+午後
 %Y年 %B%e日 %A %X %Z
 1月
 2月

環境変数の設定

以下のように PATH_LOCALE を設定します。

export PATH_LOCALE=$HOME/.config/locale

これで正しく表示されるようになりました。

# date
2025年 6月22日 日曜日 16時00分00秒 JST

まとめ

本当は macOS 自体の修正が入ってほしいのですが、春頃からこの不具合が出ていて一向に修正される気配がないので、自前で修正する方法をまとめました。
お役に立てれば幸いです。

ちなみに cal コマンドも同じ理由で表示がおかしくなるようです……。

technical

Posted by yokky