
___x_cmd_ccal_util_normalize0(){
    local y=""
    local m=""
    local d=""

    case "$1" in
        t|today)
            ___x_cmd_cmds date +%Y-%m-%d
            return 0
            ;;
        *-*-*)
            y="${1%%-*}"
            d="${1##*-}"
            m="${1#*-}"; m="${m%-*}"
            ;;
        */*/*)
            y="${1%%/*}"
            d="${1##*/}"
            m="${1#*/}"; m="${m%/*}"
            ;;
        *)
            return 1
            ;;
    esac

    printf "%04d-%02d-%02d" "${y}" "${m}" "${d}"
}

___x_cmd_ccal_util_padzero4_(){
    case "$1" in
        ?)          x_=000${1}  ;;
        ??)         x_=00${1}   ;;
        ???)        x_=0${1}    ;;
        ????)       x_=${1}     ;;
    esac
    x_="$1"
}

___x_cmd_ccal_util_padzero2_(){
    case "$1" in
        ?)          x_=0${1}  ;;
    esac
    x_="$1"
}

___x_cmd_ccal_util_normalize0_(){
    local y=""
    local m=""
    local d=""

    x_=""

    case "$1" in
        t|today)
            x_="$(___x_cmd_cmds date +%Y-%m-%d)"
            return 0
            ;;
        *-*-*)
            y="${1%%-*}"
            d="${1##*-}"
            m="${1#*-}"; m="${m%-*}"
            ;;
        */*/*)
            y="${1%%/*}"
            d="${1##*/}"
            m="${1#*/}"; m="${m%/*}"
            ;;
        *)
            return 1
            ;;
    esac

    ___x_cmd_ccal_util_padzero4_ "$y"; y="$x_"
    ___x_cmd_ccal_util_padzero2_ "$m"; m="$x_"
    ___x_cmd_ccal_util_padzero2_ "$d"; d="$x_"

    x_="$y-$m-$d"
}

___x_cmd_ccal_util_isvalid(){
    local y=""
    local m=""
    local d=""

    case "$1" in
        *-*-*)
            y="${1%%-*}"
            d="${1##*-}"
            m="${1#*-}"; m="${m%-*}"

            if  ___x_cmd is int "$y" && \
                ___x_cmd is int "$m" && \
                ___x_cmd is int "$d"; then
                    return 0
            fi
            ;;
    esac

    ccal:error "Invalid format -> $1. Expect xxxx-xx-xx"
    return 1
}
