Преобразование формата аргумента даты из ГГГГММДД в ​​ДД-МОН-ГГГГ - PullRequest
0 голосов
/ 03 февраля 2019

Может ли кто-нибудь сообщить мне, как преобразовать значение аргумента даты ГГГГММДД (т. Е. Для экс-20171010) в формат даты «ДД-МОН-ГГГГ» (т. Е. 10-ОКТ-2017).Также мне нужно проверить дату, которую пользователь указывает в качестве аргумента при выполнении сценария.

Примечание: Файловая система поддерживает только команды AIX.У меня есть предложение, как показано ниже, которое не поддерживается файловой системой AIX.

См. Страницу - https://www.unix.com/shell-programming-and-scripting/173248-converting-date-yyyymmdd-dd-mon-yyyy.html

https://www.unix.com/shell-programming-and-scripting/58675-change-date-dd-mmm-yyyy-mm-dd-yyyy.html

date -f date -jдата -d

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Рассмотрим этот 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
0 голосов
/ 07 февраля 2019
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"
0 голосов
/ 04 февраля 2019

Если у вас есть 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 "$1" 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...