вообще программа /bin/date
берёт информацию о формате вывода из базы данных локалей (locales). текущие установки локали можно посмотреть, вызвав без аргументов программу:
$ locale
а с помощью вот такого вызова можно узнать формат для текущей локали:
$ locale -c d_t_fmt
вот этот кусочек (из вашего примера) — 07:52:54 PM
— программой /bin/date
выводится для формата %r
(см. $ man date
: «locale's 12-hour clock time (e.g., 11:11:04 PM)»).
вы можете увидеть упоминание этого формата, запустив предыдущую команду.
переопределить же формат даты/времени можно переменной окружения LC_TIME
. примеры:
$ env -i LC_TIME=ru_RU.utf8 /bin/date
Вт 10 янв 2023 19:15:48 MSK
$ env -i LC_TIME=en_US.utf8 /bin/date
Tue 10 Jan 2023 07:15:59 PM MSK
выберите подходящую локаль (не содержащую в d_t_fmt
формата %r
). их вообще много, см. вывод:
$ grep -r d_t_fmt /usr/share/i18n/locales/ | grep -v '%r'
вообще даже ru_RU подойдёт под вашу задачу:
$ env -i LC_TIME=ru_RU.utf8 /bin/date
Вт 10 янв 2023 19:26:29 MSK
но можно и на какой-нибудь англоязычной остановиться:
$ grep -r d_t_fmt /usr/share/i18n/locales/ | grep -v '%r' | grep en_
/usr/share/i18n/locales/en_IL:d_t_fmt "%a %d %b %Y %T"
/usr/share/i18n/locales/en_ZM:d_t_fmt "%a %d %b %Y %T %Z"
/usr/share/i18n/locales/en_NG:d_t_fmt "%a %d %b %Y %T"
/usr/share/i18n/locales/en_IN:d_t_fmt "%A %d %B %Y %I:%M:%S %p"
/usr/share/i18n/locales/en_AG:d_t_fmt "%a %d %b %Y %T %Z"
/usr/share/i18n/locales/en_GB:d_t_fmt "%a %d %b %Y %T %Z"
/usr/share/i18n/locales/en_DK:d_t_fmt "%Y-%m-%dT%T %Z"
/usr/share/i18n/locales/en_PH:d_t_fmt "%A, %d %B, %Y %I:%M:%S %p"
/usr/share/i18n/locales/en_AU:d_t_fmt "%a %d %b %Y %T"
/usr/share/i18n/locales/en_HK:d_t_fmt "%A, %B %d, %Y %p%I:%M:%S"
/usr/share/i18n/locales/en_IE:d_t_fmt "%a %d %b %Y %T"
/usr/share/i18n/locales/en_ZA:d_t_fmt "%a %d %b %Y %T"
/usr/share/i18n/locales/en_NZ:d_t_fmt "%a %d %b %Y %T"
en_GB (great britain), или en_NZ (new zealand), или ещё какую-нибудь:
$ env -i LC_TIME=en_GB.utf8 /bin/date
Tue 10 Jan 19:30:10 MSK 2023
$ env -i LC_TIME=en_NZ.utf8 /bin/date
Tue 10 Jan 2023 19:30:25 MSK
но тут ещё такая засада, что если вдруг определена переменная LC_ALL
(а она часто бывает определена), то значения других «локале-задающих» переменных LC_*
игнорируются. поэтому, если она в вашем окружении определена, то менять надо уже её, а не LC_TIME
.
ах, да, совсем забыл написать про то, как менять. если у вас debian-подобный дистрибутив, то вручную подправить можно где-то в районе /etc/default/locale
, ну или совсем уж по-простому:
$ sudo dpkg-reconfigure locales
в других дистрибутивах смотрите документацию к ним.