Поскольку ввод в необычном формате, его необходимо сначала отформатировать в формате date
. Я использую формат, указанный в справочной странице "2004-02-29 16:21:42"
или "Sun, 29 Feb 2004 16:21:42 -0800"
. GNU date допускает очень гибкий формат ввода - не доверяйте ему.
Ниже я использовал sed
для сопоставления ввода и его переформатирования.
input='17-Mar-2020.22:22 -0300'
input2="$(sed 's/\([0-9]*\)-\([^-]*\)-\([^\.]*\)\.\([0-9]*\):\([0-9]*\)/\1 \2 \3 \4:\5:00/' <<<"$input")"
# input2="17 Mar 2020 22:22:00 -0300"
date --date="$input2" +"%Y-%m-%d %H:%M"
# 2020-03-18 02:22
date -jf
Дата GNU сильно отличается от Дата BSD . Они совершенно разные. Дата BSD поддерживает опции -j
и -f
, дата GNU - нет.
Есть dateutils , и они включают в себя утилиту strptime
, которая позволяет делать то, что вы хотели сделать с дата:
strptime -e -f "%Y-%m-%d %H:%M\n" -i "%d-%b-%Y.%H:%M %Z" "17-Mar-2020.22:22 -0300"