How can I change the default date format (using LC_TIME)?
In LC_TIME
, there seems to be a separate way to specify the format for the date(1)
command. This can be seen in 16.04's en_US
locale definition:
% 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
These lines are missing from 17.04 and newer's en_US
locale definition, but is still present in the C
and POSIX
locale files (so date
maybe using these as a fallback).
If I do edit the en_US
locale to add a date_fmt
setting before END LC_TIME
and update the locales, it works fine:
# 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
Related videos on Youtube
![Gowtham](https://i.stack.imgur.com/tZQMI.png?s=256&g=1)
Gowtham
Updated on September 18, 2022Comments
-
Gowtham almost 2 years
How do I change the format of
date
command by modifyingLC_TIME
in locale?Currently the day of month uses
%e
format. I need it to be displayed in%d
format.Below is the Current Format:
#date Thu Aug 9 18:26:11 IST 2018
Expected format:
#date Thu Aug 09 18:26:11 IST 2018
Here is my locale:
#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
section in/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
Please let me know what I can do in order to get the expected format.
NOTE: I need to execute just
date
command without any formatting options.-
goo almost 6 yearsSInce
strings $(type -p date) | grep LC
shows no output, it is clear thatdate
is not influenced byLC_TIME
. You cannot "Change Default Date format using LC_TIME" -
danzel almost 6 years@waltinator
date
is indeed influenced byLC_TIME
.date
's texinfo also explicitly recommends to setLC_TIME
toC
in order to produce locale independent output. -
Gowtham almost 6 years@danzel do you have the solution?..
-
danzel almost 6 years@Goron I'm not sure what you want to achieve. Why don't you just use a custom format string like
date +"%a %b %d %T %Z %Y"
? -
Gowtham almost 6 years@danzel yes I can do it.. but the thing is.. I have few 3rd party libraries relied upon date output. Currently it's expecting format with %d..
-
goo almost 6 yearsThe
dt_t_fmt
looked like Unicoded ASCII, so I decoded it. It is%A %d %B %Y %I:%M:%S %p %Z
date "+%A %d %B %Y %I:%M:%S %p %Z" --date=yesterday
(today is the 10th) givesThursday 09 August 2018 02:12:57 PM EDT
-
Gowtham almost 6 yearsBut
date
givesThu Aug 9 18:26:11 IST 2018
... Which is different fromLC_TIME d_t_fmt
format defined inen_IN
.. ..
-
-
Gowtham almost 6 yearsThanks for the answer @muru.. I have done the same way as you said. But still i get the same format as before..
#date Mon Aug 13 06:40:12 UTC 2018 # cat en_US | grep date_fmt date_fmt "%F %Z" # 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 Mon Aug 13 06:48:44 UTC 2018
... Am I missing anything?.. -
muru almost 6 years@Goron where in
/usr/share/i18n/locales/en_US
did you adddate_fmt
? Please edit the question to add more details. -
Gowtham almost 6 yearsI have edited the
/usr/share/i18n/locales/en_US
please check and confirm... or should I editd_t_fmt "%a %d %b %Y %r %Z"
line?... -
muru almost 6 yearsHmm, then I have no idea. I just tried out what you did in a fresh docker container and had no problems. :/
-
Gowtham almost 6 yearsOk @muru .. You tried in Ubuntu server 18?
-
muru almost 6 years@Goron on Docker images of 17.04, 17.10 and 18.04.
-
Gowtham almost 6 yearsthen it should work ... I Will check what's wrong and get back..
-
Gowtham almost 6 yearsLet us continue this discussion in chat.
-
Gowtham almost 6 years
locate LC_TIME
gives/usr/lib/locale/C.UTF-8/LC_TIME
does this mean I need to modifyC
in locales??