Установить 24-часовой формат даты linux

Рейтинг: 2Ответов: 1Опубликовано: 10.01.2023

Друзья, всем привет! Не могу найти информацию о том, как установить 24-часовой формат даты на сервере linux (Ubuntu).

При вводе в консоль команды date выводится

Tue Jan 10 07:52:54 PM +05 2023

А мне нужно, чтобы было в 24-часовом формате. Не 07:52, а 19:52

Ответы

▲ 7Принят

вообще программа /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

в других дистрибутивах смотрите документацию к ним.