3단계로 로케일의 날짜 형식을 사용자 정의하는 방법

3단계로 로케일의 날짜 형식을 사용자 정의하는 방법

현재 내 시스템에서는 기본적으로 다음과 같이 date출력됩니다.

$ date
Fri 29 Jan 22:04:26 GMT 2016

그러나 이 형식의 날짜를 다시 입력하려고 하면 date"잘못된 날짜"가 발생합니다.

$ date -d "$(date)"
date: invalid date ‘Fri 29 Jan 22:06:14 GMT 2016’

date다음을 이해할 수 있는 형식을 수동으로 선택할 수 있다는 것을 알고 있습니다 .

$ date -d "@$(date +%s)"
Fri 29 Jan 22:08:03 GMT 2016

하지만 다시 허용되지 않는 형식을 출력하는 이유가 궁금합니다.

답변1

나는 수년 동안 나를 괴롭혔던 이 답변을 검색하는 데 약 2시간을 보냈고 마침내 그것을 발견했습니다!!

기본적으로 또는 등 date의 현재 로케일 형식으로 날짜를 출력합니다 .en_GB.UTF-8en_AU.UTF-8de_DE.UTF-8

귀하의 기본 로케일은 내 것과 유사하며 날짜를 다음 형식으로 표시합니다.

date_fmt "%a %e %b %H:%M:%S %Z %Y"

불행하게도 이것은 date 명령이 이해할 수 없는 몇 가지 형식 중 하나입니다. 그러나 만일이해할 수 있다매우 유사한 형식

date_fmt "%a %e %b %Y %H:%M:%S %Z"

"2016년 1월 29일 금요일 22:04:26 GMT" 작동

"2016년 1월 29일 금요일 22:04:26 GMT"는 그렇지 않습니다.

매우 일반적으로 사용되는 로케일의 en_GB.UTF-8 및 en_AU.UTF-8이 읽을 수 없는 형식을 사용하는 이유 date는 모르겠지만 적어도 다시는 귀찮게 하지 않도록 조정하는 것은 매우 쉽습니다. 시스템을 다시 설치하거나 과도한 업데이트로 정의를 덮어쓸 때까지 >:-(

3단계로 로케일의 날짜 형식을 사용자 정의하는 방법

다음 정보를 찾았습니다.여기:

1. 사용 중인 로케일을 확인하세요.

먼저 시스템이 시간 및 날짜 형식으로 사용하는 로캘을 확인하세요.

$ locale
LANG=en_AU.UTF-8
LANGUAGE=en_AU
LC_CTYPE="en_AU.UTF-8"
LC_NUMERIC=en_AU.UTF-8
LC_TIME=en_AU.UTF-8
LC_COLLATE="en_AU.UTF-8"
LC_MONETARY=en_AU.UTF-8
LC_MESSAGES="en_AU.UTF-8"
LC_PAPER=en_AU.UTF-8
LC_NAME=en_AU.UTF-8
LC_ADDRESS=en_AU.UTF-8
LC_TELEPHONE=en_AU.UTF-8
LC_MEASUREMENT=en_AU.UTF-8
LC_IDENTIFICATION=en_AU.UTF-8
LC_ALL=

참고하세요LC_TIME=기입. 내 영어는 호주어입니다.en_AU.UTF-8당신의 것은 en_GB_UTF-8일지도 모릅니다

2. 로케일 정의 편집

터미널을 열고 적절한 로캘 정의를 편집하세요.

$ sudo nano /usr/share/i18n/locales/{LC_Time}

예를 들어

$ sudo nano /usr/share/i18n/locales/en_AU

LC_TIME 섹션까지 아래로 스크롤하세요. 내 내용은 다음과 같습니다.

LC_TIME
abday       "Sun";"Mon";"Tue";"Wed";"Thu";"Fri";"Sat"
day         "Sunday";/
            "Monday";/
            "Tuesday";/
            "Wednesday";/
            "Thursday";/
            "Friday";/
            "Saturday"
abmon       "Jan";"Feb";/
            "Mar";"Apr";/
            "May";"Jun";/
            "Jul";"Aug";/
            "Sep";"Oct";/
            "Nov";"Dec"
mon         "January";/
            "February";/
            "March";/
            "April";/
            "May";/
            "June";/
            "July";/
            "August";/
            "September";/
            "October";/
            "November";/
            "December"
d_t_fmt     "%a %d %b %Y %T %Z"
d_fmt       "%d//%m//%y"
t_fmt       "%T"
am_pm       "AM";"PM"
t_fmt_ampm  "%I:%M:%S %p"
date_fmt    "%a %e %b %Y %H:%M:%S %Z"
week 7;19971130;1
END LC_TIME

변경해야 할 것은 date_fmt항목 뿐입니다.

내 것을 다음에서 date_fmt "%a %e %b %H:%M:%S %Z %Y"다음 으로 변경했습니다:date_fmt "%a %e %b %Y %H:%M:%S %Z"

파일을 저장하고 편집기를 종료합니다.

3 로케일 재생성

다음을 사용하여 로캘 정의 파일을 다시 컴파일합니다.

$ sudo locale-gen

그게 다야! 이제 date명령은 기본적으로 기본적으로 입력으로 다시 받아들일 수 있는 형식으로 출력을 제공해야 합니다.

$ date -d "$(date)"
Mon 17 Aug 2020 17:58:37 AWST

관련 정보