我在Solaris中尝试以下命令。我在bash
START_DT="$(date --date='2013-04-01' +'%Y-%m-%d')"
它给我错误
-bash-3.2$ START_DT="$(date --date='2013-04-01' +'%Y-%m-%d')"
date: illegal option -- date=2013-04-01
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
-bash-3.2$ START_DT=$(date -d '2013-04-01' +%Y-%m-%d)
date: illegal option -- d
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
当我在RedHat中尝试相同时,它可以工作。
$ START_DT="$(date --date='2013-04-01' +'%Y-%m-%d')"
$ echo $START_DT
'2013-04-01'
以同样的方式,某些算术运算不起作用。通过算术运算,我的意思是在给出日期等10天后添加。
但这一切都适用于Redhat。可能是我有一个非常旧的Solaris版本,我只需要使用此服务器来处理此问题陈述
答案 0 :(得分:0)
我没有要测试的Solaris 10机箱,但它应该带有perl:
perl -MTime::Piece -sle '
($fmt = shift @ARGV) =~ s/^\+//;
print Time::Piece->strptime($date, $datefmt)->strftime($fmt)
' -- -date='2017-03-15' -datefmt='%Y-%m-%d' '+%d/%m/%y'
15/03/17
使用Time :: Piece :: strptime函数,您需要指定日期时间字符串的日期时间格式。
你可以把它包装成一个bash函数,如:
mydate () {
local OPTIND OPTARG date datefmt fmt opt
while getopts ":d:f:" opt; do
case $opt in
d) date=$OPTARG ;;
f) datefmt=$OPTARG ;;
:) echo "error: missing argument for -$OPTARG; return 1 ;;
*) echo "error: unknown argument: -$OPTARG; return 1 ;;
esac
done
shift $((OPTIND-1))
if [[ -z "$date" ]]; then
command date "$@"
elif [[ -z "$datefmt" ]]; then
echo "error: missing -f date format for input date $date"
return 1
else
if [[ -z "$1" ]]; then
fmt="%c"
else
fmt=${1#+}
fi
perl -MTime::Piece -sle 'print Time::Piece->strptime($d, $df)->strftime($f)' -- \
-d="$date" \
-df="$datefmt" \
-f="$fmt"
fi
}