Как я могу изменить формат даты по умолчанию (используя LC_TIME)?
Как мне изменить формат date
команда путем изменения LC_TIME
в локали?
В настоящее время день месяца использует %e
формат. Мне нужно, чтобы это отображалось в %d
формат.
Ниже приведен текущий формат:
#date
Thu Aug 9 18:26:11 IST 2018
Ожидаемый формат:
#date
Thu Aug 09 18:26:11 IST 2018
Вот мой язык:
#locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_IN
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
LC_TIME
раздел в /usr/share/i18n/locales/en_US
:
LC_TIME
abday "Sun";"Mon";"Tue";"Wed";"Thu";"Fri";"Sat"
day "Sunday";/
"Monday";/
"Tuesday";/
"Wednesday";/
"Thursday";/
"Friday";/
"Saturday"
week 7;19971130;1
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"
% Appropriate date and time representation (%c)
d_t_fmt "%a %d %b %Y %r %Z"
%
% Appropriate date representation (%x)
d_fmt "%m//%d//%Y"
%
% Appropriate time representation (%X)
t_fmt "%r"
%
% Appropriate AM/PM time representation (%r)
t_fmt_ampm "%I:%M:%S %p"
%
% Strings for AM/PM
%
am_pm "AM";"PM"
date_fmt "%F %Z"
END LC_TIME
Пожалуйста, дайте мне знать, что я могу сделать, чтобы получить ожидаемый формат.
ПРИМЕЧАНИЕ: мне нужно просто выполнить date
Команда без каких-либо параметров форматирования.
2 ответа
В LC_TIME
Похоже, что существует отдельный способ указать формат для date(1)
команда. Это можно увидеть в 16.04 en_US
определение локали:
% Appropriate date representation (date(1)) "%a %b %e %H:%M:%S %Z %Y"
date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"
END LC_TIME
Эти строки отсутствуют с 17.04 и новее en_US
определение локали, но все еще присутствует в C
а также POSIX
файлы локали (так date
возможно, используя их как запасной вариант).
Если я отредактирую en_US
локаль, чтобы добавить date_fmt
установка перед END LC_TIME
и обновите локали, все работает нормально:
# grep date_fmt /usr/share/i18n/locales/en_US
date_fmt "%F %Z"
# env LC_TIME=en_US.UTF-8 date
2018-08-13 JST
# date
Mon Aug 13 15:25:14 JST 2018
# sed -i 's/date_fmt.*/date_fmt "%Y"/' /usr/share/i18n/locales/en_US
# locale-gen en_US.UTF-8
Generating locales (this might take a while)...
en_US.UTF-8... done
Generation complete.
# env LC_TIME=en_US.UTF-8 date
2018
Думаю, здесь вы найдете ответы, которые ищете:
https://unix.stackexchange.com/a/748687/279250
В короткой версии вы можете сделать это с помощью параметров командной строки, переменных среды или добавив новую локаль. В посте подробно рассказывается о каждом из них. Возможно, вам понадобятся немного другие спецификаторы формата, но вы увидите, где их разместить и как заставить их действовать.