pff01632
@pff01632 (早川 健)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

linuxのdateコマンドの日付文字列解釈ルール

Discussion

Closed

解決したいこと

dateコマンドの解釈アルゴリズム、何が「解釈できるのか」を知りたい。

発生している問題・エラー

dateコマンドの-dで入力日付文字列を解釈して文字列変換しようとした。

  • 解釈不能な文字列の場合は現時点の日付時刻を使用する
  • 解釈可能な文字列の場合はそれを使用する

だが特定の 日付と解釈できるとは思えない 文字列を解釈されている。
解釈された結果は謎のアルゴリズムで(固定の)日付にされているようだ。
以下はVirtualBox上のUbuntu22.04LTS上での実行結果。

user@user-VirtualBox:~/develop/bash$ date -d "AAAAA"
date: `AAAAA' は無効な日付です
user@user-VirtualBox:~/develop/bash$ date -d "x"
2022年  7月 29日 金曜日 20:00:00 JST
user@user-VirtualBox:~/develop/bash$ date -d "X"
2022年  7月 29日 金曜日 20:00:00 JST
user@user-VirtualBox:~/develop/bash$ date -d "XX"
date: `XX' は無効な日付です
user@user-VirtualBox:~/develop/bash$ 

自分はどうしたいのか?

  • 最善はdateコマンドの文字列解釈アルゴリズムの仕様がわかること。
  • dateコマンドの「バグか仕様か」がわかること。
  • 日付文字列で "x" をはねる方法、"x" だけをはねれば解決するのか?
  • ほかにも 変換可能な日付ではない文字列があるのでは? という疑問。

解決 した しなかった

date -d "*"
において、* = 0-9/A-Z/a-z のいずれか1文字であれば変換される。
なぜ変換されるのか?についての仕様はわからない。

1

GNU Coreutils の date コマンドの日付解釈ルールについてはここにまとまっています。

1文字のA-Z/a-z(J, j を除く)は military time zones の指定と解釈されます。現在では Z, z 以外の指定は非推奨です。

1桁の数字は時分秒の時になります。

1Like

Your answer might help someone💌