내 질문은 간단해야 할 것 같지만 답을 찾을 수 없어서 놀랐습니다.
저는 캐나다에 살고 있으므로 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_fmt
( d_t_fmt
날짜 및 시간)에 따라 결정됩니다. 예상할 수 있듯이 %d
, %m
및 를 사용 %y
하지만 일반적으로 유니코드 코드 포인트 %
is <U0025>
, d
is <U0064>
, m
is <U006D>
및 y
is 로 인코딩됩니다 <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
답변2
@Stephen Kitt가 보고 있는 위치를 언급했듯이 en_DK
응용 프로그램이 실행 중인 로케일의 날짜 형식을 결정하는 경우에도 사용합니다. 예를 들어 thunderbird
이를 재정의하기 위해 이와 같은 래퍼 스크립트가 있습니다.
~/bin/thunderbird
#!/bin/bash
export LC_TIME=en_DK # or whatever you want
[ "$LC_ALL" != "$LC_TIME" ] && unset LC_ALL # only necessary if set to something different from LC_TIME
exec /usr/bin/thunderbird "$@"
답변3
각 로캘을 보고 인쇄합니다.
ls /usr/share/i18n/locales/ | while read myLC
do
echo "# $myLC"
TZ=Europe/Paris LC_TIME=$myLC date +%c
done
그런 다음 다음과 같이 이전(-B)을 사용하여 이 목록을 grep할 수 있습니다.
ls /usr/share/i18n/locales/ |while read myLC;do echo "# $myLC";TZ=Europe/Paris LC_TIME=$myLC date +%c;done |grep -B1 2022-04
인쇄하다:
# en_DK
2022-04-22T10:58:54 CEST
--
# si_LK
2022-04-22 10:58:54 +0200
다양한 TZ 시간대 목록은 /usr/share/zoneinfo/zone.tab을 참조하세요.