Что означает буква 'T' в формате дадания даты YYYY-MM-DDThh:mm:ss ?

Любые разговоры которые хоть как-то связаны с тематикой форума

Модератор: Модераторы разделов

MiK13
Сообщения: 1240
ОС: Linux Debian

Что означает буква 'T' в формате дадания даты YYYY-MM-DDThh:mm:ss ?

Сообщение MiK13 »

Для команды datetouch можно указать время в формате YYYY-MM-DDThh:mm:ss
Причём вместо 'T' можно использовать пробел (если он заэкранирован для bash)
Меня заинтересовало, что будет если вместо 'T' использовать другую букву. И оказалось, что можно использовать любую латинскую букву кроме 'J'. Но буква влияет на результат. И возник вопрос: КАК буква влияет на результат?
Проверка
Spoiler

Shell

mik13@MK:/dev/shm$ for C in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ; do echo -n "$C: " ; date -d 2024-10-20"${C}"00:34:56 ; done
A: Вс 20 окт 2024 02:34:56 +03
B: Вс 20 окт 2024 01:34:56 +03
C: Вс 20 окт 2024 00:34:56 +03
D: Сб 19 окт 2024 23:34:56 +03
E: Сб 19 окт 2024 22:34:56 +03
F: Сб 19 окт 2024 21:34:56 +03
G: Сб 19 окт 2024 20:34:56 +03
H: Сб 19 окт 2024 19:34:56 +03
I: Сб 19 окт 2024 18:34:56 +03
J: date: неверная дата «2024-10-20J00:34:56»
K: Сб 19 окт 2024 17:34:56 +03
L: Сб 19 окт 2024 16:34:56 +03
M: Сб 19 окт 2024 15:34:56 +03
N: Вс 20 окт 2024 04:34:56 +03
O: Вс 20 окт 2024 05:34:56 +03
P: Вс 20 окт 2024 06:34:56 +03
Q: Вс 20 окт 2024 07:34:56 +03
R: Вс 20 окт 2024 08:34:56 +03
S: Вс 20 окт 2024 09:34:56 +03
T: Вс 20 окт 2024 00:34:56 +03
U: Вс 20 окт 2024 11:34:56 +03
V: Вс 20 окт 2024 12:34:56 +03
W: Вс 20 окт 2024 13:34:56 +03
X: Вс 20 окт 2024 14:34:56 +03
Y: Вс 20 окт 2024 15:34:56 +03
Z: Вс 20 окт 2024 03:34:56 +03
показала, что от буквы зависит значение часов. То есть часовой пояс.
Но как?
Используя sort -k6, я увидел, что буквы 'M' и 'Y' дают результат, который отличается на 24 часа. А буква 'C' ('Z' в случае UTC) даёт такой же результат, как и 'T'.
Но я пока не увидел закономерности (хотя частичная есть)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5393
ОС: Gentoo

Re: Что означает буква 'T' в формате дадания даты YYYY-MM-DDThh:mm:ss ?

Сообщение /dev/random »

По стандарту в этом формате можно использовать только "T" или пробел. Но парсер даты, используемый в date, пытается распознать как можно больше форматов, в том числе неофициальных, смешанных и ошибочных. Если вы укажете там другую букву или слово, он попытается их распознать как часовой пояс, день недели и т.п., считая, что вы просто воткнули их не туда. В том числе он будет рассматривать и однобуквенные часовые пояса из rfc822, несмотря на то, что они из другого формата.
Спасибо сказали:
MiK13
Сообщения: 1240
ОС: Linux Debian

Re: Что означает буква 'T' в формате дадания даты YYYY-MM-DDThh:mm:ss ?

Сообщение MiK13 »

/dev/random писал:
24.10.2024 18:47
В том числе он будет рассматривать и однобуквенные часовые пояса из rfc822
Спасибо. Теперь стало понятно. В том числе и нарушение последовательности.
'T' означает зону +7, но используется именно как указатель на начало времени
/dev/random писал:
24.10.2024 18:47
несмотря на то, что они из другого формата.
А из какого?
Спасибо сказали: