

___x_cmd_humantime_tosec_(){
    local decimal_flag=""
    while [ $# -gt 0 ]; do
        case "$1" in
            --decimal)    decimal_flag=1; shift ;;
            *)            break ;;
        esac
    done

    local human="${1}"

    local num
    local dec_part

    local day=0
    local day_decimal=0

    local hour=0
    local hour_decimal=0

    local minute=0
    local minute_decimal=0

    local second=0
    local second_decimal=0

    local IFS='dhms'
    for num in $human; do
        human="${human#"$num"}"
        dec_part=0
        case "$num" in
            *.*.*)
                N=humantime M="Invlaid number with two dot." log:ret:64 ;;
            *.*)
                dec_part="${num#*.}"
                case "${#dec_part}" in
                    8)  dec_part="${dec_part}0" ;;
                    7)  dec_part="${dec_part}00" ;;
                    6)  dec_part="${dec_part}000" ;;
                    5)  dec_part="${dec_part}0000" ;;
                    4)  dec_part="${dec_part}00000" ;;
                    3)  dec_part="${dec_part}000000" ;;
                    2)  dec_part="${dec_part}0000000" ;;
                    1)  dec_part="${dec_part}00000000" ;;
                    0)  dec_part=0 ;;
                    *)  dec_part=${dec_part%"${dec_part#????????}"} ;;
                esac
                num="${num%%.*}"
                ;;
            *)
                dec_part=0
                ;;
        esac

        num="${num:-0}"
        case "$human" in
            d*)     day=$((     day     + num ))
                    day_decimal=$(( day_decimal + dec_part ))
                    ;;
            h*)     hour=$((    hour    + num ))
                    hour_decimal=$(( hour_decimal + dec_part ))
                    ;;
            m*)     minute=$((  minute  + num ))
                    minute_decimal=$(( minute_decimal + dec_part ))
                    ;;
            s*)     second=$((  second  + num ))
                    second_decimal=$(( second_decimal + dec_part ))
                    ;;
            *)      second=$((  second  + num ))
                    second_decimal=$(( second_decimal + dec_part ))
                    ;;
        esac
        human="${human#?}"
    done

    x_=$(( ( ( day_decimal * 24 + hour_decimal ) * 60 + minute_decimal ) * 60 + second_decimal ))

    local rest=$(( x_ % 1000000000 ))
    x_=$(( ( ( ( day * 24 + hour ) * 60 + minute ) * 60 + second ) + x_ / 1000000000 ))

    if [ -z "$decimal_flag" ]; then
        return 0
    fi

    local DOT="."
    if [ "$___X_CMD_HUMANTIME_UNIT" = ms ]; then
        DOT=""
    fi

    if [ $rest = 0 ]; then
        x_="${x_}${DOT}000"
    else
        case "${#rest}" in
            9)  x_="${x_}${DOT}${rest%??????}" ;;
            8)  x_="${x_}${DOT}0${rest%??????}" ;;
            7)  x_="${x_}${DOT}00${rest%??????}" ;;
            *)  x_="${x_}${DOT}000"
        esac
    fi
}

