Cygwin、Linux Bash计算某个时刻偏移一定时间长度后的时间通用函数:datetimecount
datetimecount 函数代码
datetimecount() {
#计算某个日期时间偏移一定时间长度后的时刻(目前主要供录制IPTV直播源时计算视频时长使用)
# $1-->偏移量:符合date命令的描述参数即可,也支持传递标准时间格式:eg: +01:23:35 (标记符号(加减号)可省略,小时字段可省略)
# $2-->要计算偏移时间基点:可省略(缺省时以当前时刻为偏移的基点)
local moveTime="$1"
local baseTime="$2"
if [[ "${moveTime}" =~ ^([-+] ?)?([0-9]{1,2}:)?[0-9]{1,2}:[0-9]{1,2}$ ]];then
#echo "格式需要转换!"
local moveTime=$(echo "$moveTime"|sed -r 's/^(\+|\-)/\1 /'|tr -s ' ') #始终保证+号或-号后有一个空格;
local convertCode=$(echo "$moveTime"|awk -F '[: ]' '{
flag="";
if($1=="-" || $1=="+"){
flag=$1;
sub($1,"");
}
seconds=$NF;
if($(NF-1)) minutes=$(NF-1);
if(NF-2>0) hours=$(NF-2);
/** 判断&拼装 **/
if(hours) hours=sprintf("%s%s hours ",flag,hours);
if(minutes!="") minutes=sprintf("%s%s minutes ",flag,minutes);
if(seconds!="") seconds=sprintf("%s%s seconds",flag,seconds);
/* printf "%s %s %s %s\n",flag,hours,minutes,seconds; */
printf "local moveTime=\"%s %s%s%s\"\n",flag,hours,minutes,seconds;
}')
eval "$convertCode"
#echo "moveTime =>: $moveTime"
fi
column -t -R 1 -s ":" -o ":"<<<$(
printf "时间基点:%s\n" "$(date -d "$baseTime" +'%F %T')"
date -d "${moveTime} ${baseTime}" +'偏移后的时间格式化:%F %T'$'\n''偏移后的时间戳:@%s'
)
}
使用方法:
datetimecount 偏移量 [要偏移的时间基点]
注:时间基点可以省略,缺省时以当前时刻作为时间基点
使用示例:
# 计算 12:30 前进 19分21秒 秒后的时间
datetimecount 19:21 12:30
或
datetimecount 19:21 12:30 #+号表示时间向前推移,-号表示时间倒退,默认为+号时可省略
---
# 计算 12:30 倒退 18分40秒 后的时间
datetimecount -18:40 12:30
---
# 另:支持指定 date 命令支持的日期时间描述类字符串
eg:
datetimecount '-18 mins -40 seconds' 12:30
操作截图
本文来自博客园,作者:晴云孤魂,转载请注明原文链接:https://www.cnblogs.com/cnhack/p/17553830.html