将字符串转换为时间格式并附加当前日期 - Shell/ksh

将字符串转换为时间格式并附加当前日期 - Shell/ksh

我希望将字符串作为命令参数HHMMSS,并将其转换为时间格式,HH:MM:SS并将其附加到当前日期(需要使用“date”命令在脚本中生成日期)

例如,如果我的命令行参数为093500,则应将其转换为09:35:00并附加当前日期,例如, 2018-05-16 09:35:00

例子:

$ ./convertTime.sh 093500
2018-05-16 09:35:00

答案1

如果 by ksh,您的意思是 ksh93:

$ t=093500
$ DATEMSK=/dev/stdin <<<%H%M%S printf "%(%F %T)T\n" "$t"
2018-05-17 09:35:00

或者:

$ printf '%(%F)T %.8s\n' now "${t//??/\0:}"
2018-05-17 09:35:00

或者可移植的(Bourne 或 csh 系列的 shell 或fish

$ date +"%Y-%m-%d $t" | sed 's/\(..\)\(..\)$/:\1:\2/'
2018-05-17 09:35:00

(对于类似 rc 的 shell,请使用date +'%Y-%m-%d '$t

答案2

这是一种可能的解决方案。工作原理如下:

$ ./format_date.sh 092533
2018-05-17 09:25:33
#!/bin/bash

format_time(){
    point=0
    while [ "$point" -le "${#1}" ];
    do
        string=$string"${1:$point:2}"
        if [ "$point" -lt "$((${#1}-2))"  ]
        then
        string=$string":"
        fi
        point=$((point+2))
    done
    echo "$string"
}

echo "$(date +'%Y-%m-%d')" "$( format_time "$1" )"

这利用了典型的bash和参数替换ksh,因此这适合您的问题标签,但它不适合 POSIX,/bin/sh因为${variable:position:offset}form 在 POSIX 中不起作用/bin/sh

相关内容