Я пытаюсь проанализировать дату, извлеченную с помощью exiftool из метаданных файлов MOV. Он поставляется в формате, например. 2024:05:31 20:57:23+03:00. Несмотря на то, что в GNU date есть опция %:z и она способна создавать временную метку в таком формате, она не может проанализировать существующее ее значение:
# echo $creation_date
2024:05:31 20:57:23+03:00
# date "+%Y:%m:%d %H:%M:%S%:z"
2024:06:08 22:04:15+02:00
# date "+%Y:%m:%d %H:%M:%S%:z" -d "$creation_date"
date: invalid date ‘2024:05:31 20:57:23+03:00’
Что мне здесь не хватает?
date != strptime() . Строка формата для date функционально такая же, как и для strftime(), т. е. это формат вывода, который вам нужен, а не формат ввода, который вы хотите анализировать, как если бы вы использовали инструмент с функцией strptime(). . date ожидает, что ввод будет в каком-то общем формате даты/времени, ни в одном из которых нет : в дате.
у exiftool есть опция -d
Вы можете использовать опцию -d (-dateFormat) exiftool, чтобы переформатировать дату/время, чтобы использовать дефисы, а не двоеточия.





Часовой пояс не проблема. Год-месяц-день разделяются знаком :, что необычно. Их можно разделить с помощью -, чтобы date их можно было понять. См. раздел «СТРОКА ДАТЫ» в man date. Вы можете изменить их:
creation_date='2024:05:31 20:57:23+03:00'
read -r ymd rest <<<"$creation_date"
date -d "${ymd//:/-} $rest"
Используйте команду strptime из dateutils, если вы хотите указать точную спецификацию формата.
Использование двоеточия для разделения года:месяца:даты — это формат, определенный стандартом EXIF, Exiftool для простоты использует его во всех тегах даты и времени.
Часовой пояс является проблемой? Год месяц день отделяется :