Unixでの日付変更形式

Unixでの日付変更形式

関数に日付を変数として渡しています。この日付を別の形式に変換したいです。はい

DT=2015-12-08

DTUnixに変換したいです08-dec-2015

答え1

GNUの日付を仮定します(つまり、組み込まれていないLinux):

$ LC_TIME=C date --date=2015-12-08 +%d-%b-%Y
08-Dec-2015

答え2

組み込みのLinuxまたはより一般的にGNU Dateを持つシステムを使用している場合は、それを使用して任意の日付形式を指定できます。

LC_ALL=C date -d "$DT" +%d-%b-%Y | tr A-Z a-z

GNU日付がない場合(または存在する場合でも)、純粋なシェルでこれを行うことができます。

case $DT in
  *-01-*|*-1-*) month=jan;;
  *-02-*|*-2-*) month=feb;;
  *-03-*|*-3-*) month=mar;;
  *-04-*|*-4-*) month=apr;;
  *-05-*|*-5-*) month=may;;
  *-06-*|*-6-*) month=jun;;
  *-07-*|*-7-*) month=jul;;
  *-08-*|*-8-*) month=aug;;
  *-09-*|*-9-*) month=sep;;
  *-10-*) month=oct;;
  *-11-*) month=nov;;
  *-12-*) month=dec;;
esac
echo "${DT##*-}-$month-${DT%%-*}"

関連情報