Time 在zsh中转换时间格式

Time 在zsh中转换时间格式,time,converter,zsh,Time,Converter,Zsh,我创建了一个z shell脚本,它使用一个time选项参数。(例如--time 00:03:30)。我希望用户能够以HH:MM:SS以外的格式输入时间。我的脚本已经可以将HH:MM:SS转换为秒(这是最终结果所需要的),但是HH:MM:SS格式很笨拙。因此,我制作了一个函数,将另一种格式(#h#m#s)转换为原始格式: if [ "$(echo "$1" | grep -E "([[:digit:]]+[hms]|[[:digit:]]+[hms][[:digit:]]+[hms]|[[

我创建了一个z shell脚本,它使用一个time选项参数。(例如--time 00:03:30)。我希望用户能够以HH:MM:SS以外的格式输入时间。我的脚本已经可以将HH:MM:SS转换为秒(这是最终结果所需要的),但是HH:MM:SS格式很笨拙。因此,我制作了一个函数,将另一种格式(#h#m#s)转换为原始格式:

    if [ "$(echo "$1" | grep -E "([[:digit:]]+[hms]|[[:digit:]]+[hms][[:digit:]]+[hms]|[[:digit:]]+[hms][[:digit:]]+[hms][[:digit:]]+[hms])")" ]; then
        if [ "$(echo "$1" | grep "h")" ]; then
            H="$(echo "$1" | sed -E 's|.*([[:digit:]]+)h.*|\1|')"
        else
            H=00
        fi
        if [ "$(echo "$1" | grep "m")" ]; then
            M="$(echo "$1" | sed -E 's|.*([[:digit:]]+)m.*|\1|')"
        else
            M=00
        fi  
        if [ "$(echo "$1" | grep "s")" ]; then
            S="$(echo "$1" | sed -E 's|.*([[:digit:]]+)s.*|\1|')"
            else
            S=00
        fi
        echo "$H:$M:$S" | sed -Ee 's|:([[:digit:]]):|:0\1:|' -e 's|^([[:digit:]]):|0\1:|' -e 's|:([[:digit:]])$|:0\1|'
    fi
是的,我已经创建了自己的解决方案。我来这里是为了找一个更好的。此外,如果你知道任何其他格式,你可以转换成秒,请让我知道

这就是你想要的吗

% zmodload zsh/datetime
% echo $(( $(strftime -r '%H:%M:%S' 01:01:12) - $(strftime -r '%H:%M:%S' 0:0:0) ))
3672

AAAA而我的解决方案根本不起作用。哈哈哈发布你的无效解决方案,也许错误很容易找到原始问题中的代码是我的解决方案。我将进一步研究,但我尝试时你的解决方案返回0。谢谢您的时间。@thefilthypineapple我尝试了zsh 4.3.10,也得到了0。也许你需要zsh5.0.0以这种方式获得正确的结果。是的——“zsh4.3.9(i386-apple-darwin10.0)”。但是,我想分享我的脚本。有没有更通用的方法?