希望の方法で日付と時刻の形式を指定するロケールをどのように検索しますか?

希望の方法で日付と時刻の形式を指定するロケールをどのように検索しますか?

私の質問は簡単なはずですが、答えが見つからなかったので驚きました。

私はカナダに住んでいるので、en_CA.UTF8またはen_US.UTF8が最適なロケールですが、日付/時刻の形式は本当に気に入らません。同意しますxkcd(https://xkcd.com/1179/) 日付形式を指定する方法はyyyy-mm-ddです。 24時間制の使用にも慣れました。

だからこれ十分私にとっては災害です。形式はen_US.UTF8:「2018年1月27日土曜日05:20:38 PM EST」です。

私はそれがバリアントを使用するロケールであるに違いないと確信しています。

%Y-%m-%d %H:%M:%S %Z

d_fmt、d_t_fmt、date_fmtなどで動作しますが、どのロケールでどの形式を使用しているかについての参照が見つかりません。

私はこの問題を見たことがありますシステム全体で日付/時刻形式をカスタマイズするためのベストプラクティスは何ですか?私は答えがなかったので、私は少し違うので、新しいものを要求することに決めました。

LC_TIME=??

「正しい」形式を取得してください。私の場合、理想的な答えは、私が望むものに最も近いLC_TIMEを選択できるように、さまざまなロケールで使用されるフォーマットを詳細に説明するリファレンスドキュメントです。

ところで、満足のいく設定でen_CA.UTF8を手動で修正する練習を行いましたが、複数の環境で実行するには時間がかかりすぎるため、より簡単な方法が必要です。

ベストアンサー1

ほとんどのLinuxシステムのロケールデータは、以下で定義されています。ソースglibcコード;一致するロケールを見つける方法を説明します。

ストレージレプリケーションで、次に進みますlocaledata/locales。ここで、各ロケールは別々のファイルであり、日付形式は項目d_fmtd_t_fmt日付と時刻)によって決まります。予想されるように%d%mおよびを使用し%yますが、通常、Unicodeコードポイントは%is <U0025>dis <U0064>mis 、<U006D>およびyisにエンコードされます<U0079>。その大文字は32ポイント高くなります。

走る

grep -iE 'd_t_fmt.*(%|<U0025>)(y|<U00[57]9>).*(%|<U0025>)(m|<U00[46]D>).*(%|<U0025>)(d|<U00[46]4>)' *

一部の候補者がリストされており、その中でen_DK最も適している可能性があります。

$ LC_TIME=en_DK date +%x
2018-02-11

おすすめ記事