从 YYYYMMDD 到 DD-MON-YYYY 的日期参数格式转换
Date Argument format conversion from YYYYMMDD to DD-MON-YYYY
谁能告诉我如何将日期参数值 YYYYMMDD(即对于前 20171010)转换为日期格式 'DD-MON-YYYY'(即 10-OCT-2017)。
我还需要验证用户在执行脚本时指定为参数的日期。
注意:文件系统将仅支持 AIX 命令。我收到如下所示的建议,AIX 文件系统不支持该建议。
https://www.unix.com/shell-programming-and-scripting/58675-change-date-dd-mmm-yyyy-mm-dd-yyyy.html
日期-f
日期-j
日期-d
如果你有 Perl,像这样的脚本应该可以工作:
#!/path/to/my/perl
use POSIX;
for (@ARGV ? @ARGV : <STDIN>) {
my ($Y,$m,$d) = m/(\d\d\d\d)(\d\d)(\d\d)/;
my $t = strftime "%d-%b-%Y", 0,0,0,$d,$m,$Y-1900;
print "\U$t\n";
}
我不知道 AIX sh
提供了哪些功能,但这可能有用:
#!/usr/bin/sh
case "" in
[1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9])
Y=${date%????}
MD=${date#????}
D=${MD#??}
M=${MD%??}
case "$M" in
01) M=JAN ;;
02) M=FEB ;;
03) M=MAR ;;
04) M=APR ;;
05) M=MAY ;;
06) M=JUN ;;
07) M=JUL ;;
08) M=AUG ;;
09) M=SEP ;;
10) M=OCT ;;
11) M=NOV ;;
12) M=DEC ;;
esac
echo "${D}-${M}-${Y}"
;;
*)
echo 1>&2 "invalid date"
exit 1 ;;
esac
将这个 ksh93 片段作为一个开始;它会做两个简单的检查,然后根据需要重新排列输入的日期:
echo enter date
read d
if [ "${#d}" -ne 8 ]
then
echo "bogus - not the right length"
else
case $d in
(*[^0123456789]*) echo "bogus - contains non-numerics"
;;
(*) echo "the new date is: ${d:6:2}-${d:4:2}-${d:0:4}"
;;
esac
fi
St_dt=""
St_D="${St_dt#??????}"
tmp="${St_dt%??}"
St_M="${tmp#????}"
if [ $St_M -le 0 -o $St_M -gt 12 ];
then
echo "$St_M is invalid month."
exit 1
fi
St_Y="${tmp%??}"
case "$St_M" in
01) St_M=JAN ;;
02) St_M=FEB ;;
03) St_M=MAR ;;
04) St_M=APR ;;
05) St_M=MAY ;;
06) St_M=JUN ;;
07) St_M=JUL ;;
08) St_M=AUG ;;
09) St_M=SEP ;;
10) St_M=OCT ;;
11) St_M=NOV ;;
12) St_M=DEC ;;
esac
Start_dt="${St_D}-${St_M}-${St_Y}"
echo "$Start_dt"
谁能告诉我如何将日期参数值 YYYYMMDD(即对于前 20171010)转换为日期格式 'DD-MON-YYYY'(即 10-OCT-2017)。 我还需要验证用户在执行脚本时指定为参数的日期。
注意:文件系统将仅支持 AIX 命令。我收到如下所示的建议,AIX 文件系统不支持该建议。
https://www.unix.com/shell-programming-and-scripting/58675-change-date-dd-mmm-yyyy-mm-dd-yyyy.html
日期-f 日期-j 日期-d
如果你有 Perl,像这样的脚本应该可以工作:
#!/path/to/my/perl
use POSIX;
for (@ARGV ? @ARGV : <STDIN>) {
my ($Y,$m,$d) = m/(\d\d\d\d)(\d\d)(\d\d)/;
my $t = strftime "%d-%b-%Y", 0,0,0,$d,$m,$Y-1900;
print "\U$t\n";
}
我不知道 AIX sh
提供了哪些功能,但这可能有用:
#!/usr/bin/sh
case "" in
[1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9])
Y=${date%????}
MD=${date#????}
D=${MD#??}
M=${MD%??}
case "$M" in
01) M=JAN ;;
02) M=FEB ;;
03) M=MAR ;;
04) M=APR ;;
05) M=MAY ;;
06) M=JUN ;;
07) M=JUL ;;
08) M=AUG ;;
09) M=SEP ;;
10) M=OCT ;;
11) M=NOV ;;
12) M=DEC ;;
esac
echo "${D}-${M}-${Y}"
;;
*)
echo 1>&2 "invalid date"
exit 1 ;;
esac
将这个 ksh93 片段作为一个开始;它会做两个简单的检查,然后根据需要重新排列输入的日期:
echo enter date
read d
if [ "${#d}" -ne 8 ]
then
echo "bogus - not the right length"
else
case $d in
(*[^0123456789]*) echo "bogus - contains non-numerics"
;;
(*) echo "the new date is: ${d:6:2}-${d:4:2}-${d:0:4}"
;;
esac
fi
St_dt=""
St_D="${St_dt#??????}"
tmp="${St_dt%??}"
St_M="${tmp#????}"
if [ $St_M -le 0 -o $St_M -gt 12 ];
then
echo "$St_M is invalid month."
exit 1
fi
St_Y="${tmp%??}"
case "$St_M" in
01) St_M=JAN ;;
02) St_M=FEB ;;
03) St_M=MAR ;;
04) St_M=APR ;;
05) St_M=MAY ;;
06) St_M=JUN ;;
07) St_M=JUL ;;
08) St_M=AUG ;;
09) St_M=SEP ;;
10) St_M=OCT ;;
11) St_M=NOV ;;
12) St_M=DEC ;;
esac
Start_dt="${St_D}-${St_M}-${St_Y}"
echo "$Start_dt"