Где определён формат вывода даты при LC_TIME=ru_RU.UTF-8

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Где определён формат вывода даты при LC_TIME=ru_RU.UTF-8

Сообщение жучара »

Друзья! Формат вывода даты определяется, среди прочего переменной LC_TIME (Debian 10):

Shell

$ LC_TIME=ru_RU.UTF-8 date
Пт 17 фев 2023 19:52:59 +05
$
Проблема в том, что LC_TIME=ru_RU.UTF-8 тоже разной бывает. На другой хорошей системе:

Shell

$ LC_TIME=ru_RU.UTF-8 date
Пт фев 17 20:00:59 +05 2023
$
ну то есть видно, что вывод совершенно разный, поля в другом порядке располагаются. А где этот порядок определяется? Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
SergeyIT
Сообщения: 71
ОС: xUbuntu

Re: Где определён формат вывода даты при LC_TIME=ru_RU.UTF-8

Сообщение SergeyIT »

Когда-то подобное делал. Но как оказалось - это совсем не надо для жизни.
Локали лежат здесь вроде
/usr/share/i18n/locales/
Можно свою создать и добавить
Генерятся командой locale-gen (почитайте про нее внимательно)
При апдейте системы может изменится.
Не проще свою команду сделать через date c опциями типа формата как надо.
Извините, я все еще учусь
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Где определён формат вывода даты при LC_TIME=ru_RU.UTF-8

Сообщение жучара »

SergeyIT писал:
18.02.2023 01:02
Когда-то подобное делал. Но как оказалось - это совсем не надо для жизни.
Локали лежат здесь вроде
/usr/share/i18n/locales/
Можно свою создать и добавить
Генерятся командой locale-gen (почитайте про нее внимательно)
При апдейте системы может изменится.
Не проще свою команду сделать через date c опциями типа формата как надо.
надо доразбираться уж. Вот, например, в файле /usr/share/i18n/locales/ru_RU у меня написано:
d_t_fmt "%a %d %b %Y %T"
date_fmt "%a %d %b %Y %T %Z"
d_fmt "%d.%m.%Y"
если по команде date выводится Пт 17 фев 2023 19:52:59 +05 получается, по умолчанию у меня используется формат, который date_fmt. Но где-то же это должно быть прописано, как то так: default date_fmt
Конфигурационных файлов для date похоже, нет.
...Пробежался по всем ссылям вот тут
https://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html#date-invocation
date_fmt упоминается ноль раз.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: Где определён формат вывода даты при LC_TIME=ru_RU.UTF-8

Сообщение olecya »

Я как то даже и не подозревала о разнице в выводах команды date.
жучара писал(а):
18.02.2023 10:54
Конфигурационных файлов для date похоже, нет.
Генерируется бинарный конфиг. Так что простого решения изменить дефолтный date_fmt нет. https://www.instructables.com/Making-a-Custom-Locale-to-Change-the-Date-Format/
Кстати в конце страницы справки man locale есть пример ну и отсыл к man localedef. Там генерируется конфиг в домашней директории и экспортируется переменная LOCPATH для его видимости. Так что ни чего не должны испортить если вздумаете экспериментировать.
Но гарантировать совместимость выводов команды date в разных системах очень легко - применить строку формата вывода:

Shell

$ locale date_fmt
%a %b %e %r %Z %Y
$ LC_TIME=ru_RU.UTF-8 locale date_fmt
%a %d %b %Y %T %Z
$ LC_TIME=ru_RU.UTF-8 date
Сб 18 фев 2023 17:34:01 MSK
$ date +'%a %d %b %Y %T %Z'
Sat 18 Feb 2023 17:34:45 MSK
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2659
ОС: Gentoo

Re: Где определён формат вывода даты при LC_TIME=ru_RU.UTF-8

Сообщение ormorph »

Код: Выделить всё

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
#include <langinfo.h>

int main(int argc, char *argv[])
{
	printf("%s\n", nl_langinfo(D_T_FMT));
	printf("%s\n", setlocale(LC_TIME, "ru_RU.UTF-8"));
	printf("%s\n", nl_langinfo(D_T_FMT));

	exit(EXIT_SUCCESS);
}
Как то так...
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Где определён формат вывода даты при LC_TIME=ru_RU.UTF-8

Сообщение жучара »

olecya писала:
18.02.2023 17:51
Я как то даже и не подозревала о разнице в выводах команды date.
жучара писал(а):
18.02.2023 10:54
Конфигурационных файлов для date похоже, нет.
Генерируется бинарный конфиг. Так что простого решения изменить дефолтный date_fmt нет. https://www.instructables.com/Making-a-Custom-Locale-to-Change-the-Date-Format/
Кстати в конце страницы справки man locale есть пример ну и отсыл к man localedef. Там генерируется конфиг в домашней директории и экспортируется переменная LOCPATH для его видимости. Так что ни чего не должны испортить если вздумаете экспериментировать.
Но гарантировать совместимость выводов команды date в разных системах очень легко - применить строку формата вывода:

Shell

$ locale date_fmt
%a %b %e %r %Z %Y
$ LC_TIME=ru_RU.UTF-8 locale date_fmt
%a %d %b %Y %T %Z
$ LC_TIME=ru_RU.UTF-8 date
Сб 18 фев 2023 17:34:01 MSK
$ date +'%a %d %b %Y %T %Z'
Sat 18 Feb 2023 17:34:45 MSK
да реально плюнуть на всё это и делать, как вы показали. $ date +'%a %d %b %Y %T %Z
Я просто читаю маны.
Спасибо сказали:
Ответить