Unix 从YYYYMMDD到DD-MON-YYYY的日期参数格式转换

Unix 从YYYYMMDD到DD-MON-YYYY的日期参数格式转换,unix,aix,Unix,Aix,谁能告诉我如何将日期参数值YYYYMMDD(即对于ex-20171010)转换为日期格式“DD-MON-YYYY”(即2017年10月10日)。 我还需要在执行脚本时验证用户指定为参数的日期 注意:文件系统只支持AIX命令。我有如下建议,AIX文件系统不支持这些建议 请参阅本页- 日期-f 日期-j date-d如果您有Perl,这样的脚本应该可以工作: #!/path/to/my/perl use POSIX; for (@ARGV ? @ARGV : <STDIN>) {

谁能告诉我如何将日期参数值YYYYMMDD(即对于ex-20171010)转换为日期格式“DD-MON-YYYY”(即2017年10月10日)。 我还需要在执行脚本时验证用户指定为参数的日期

注意:文件系统只支持AIX命令。我有如下建议,AIX文件系统不支持这些建议

请参阅本页-

日期-f 日期-j
date-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";
}
以这个片段为起点;它进行两次简单检查,然后根据需要重新排列输入的日期:

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

您想要什么日期验证?我需要将日期参数值从YYYYMMDD转换为'DD-MON-YYYY'。此外,我还需要验证用户是否以“YYYYMMDD”格式正确输入了参数值。如果没有额外的验证规则,您无法判断用户是否输入了YYYYMMDD或DDMMYYYY或MMDDYYYY(或其他内容)。您能否先让我知道如何将日期参数值格式从yyyyymmdd转换为DD-MON-YYYY??然后我们将进入验证部分,您使用的是哪种编程语言?出现错误-第6行出现语法错误:`(`)。这很奇怪。请尝试修订版本。您能告诉我如何在Unix shell脚本中实现相同的功能吗?您如何定义“Unix shell脚本”?通常,shell只是用于将命令粘合在一起(date、sed、awk、wc、sort等)。Perl只是这些命令中的一个。我添加了Bourne shell版本,但不知道AIX版本支持哪些功能。尝试了您给出的上述逻辑..只获得双'-'作为输出。AIX shell支持
${:}
?这就是我测试它的地方;不过我应该澄清一下它是ksh93Aha。我从未使用过AIX:)好的。找到了:
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="$2"
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"