知识学习

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 520|回复: 0

Bash计算某个时刻偏移时间通用函数代码datetimecount

[复制链接]

升级   20%

2

主题

2

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2024-2-9 01:33:27 | 显示全部楼层 |阅读模式
本帖最后由 xinjinbao 于 2024-2-9 01:36 编辑


datetimecount 函数代码
  1. datetimecount() {
  2.         #计算某个日期时间偏移一定时间长度后的时刻(目前主要供录制IPTV直播源时计算视频时长使用)
  3.         # $1-->偏移量:符合date命令的描述参数即可,也支持传递标准时间格式:eg: +01:23:35 (标记符号(加减号)可省略,小时字段可省略)
  4.         # $2-->要计算偏移时间基点:可省略(缺省时以当前时刻为偏移的基点)
  5.         local moveTime="$1"
  6.         local baseTime="$2"
  7.         if [[ "${moveTime}" =~ ^([-+] ?)?([0-9]{1,2}:)?[0-9]{1,2}:[0-9]{1,2}$ ]];then
  8.                 #echo "格式需要转换!"
  9.                 local moveTime=$(echo "$moveTime"|sed -r 's/^(\+|\-)/\1 /'|tr -s ' ')  #始终保证+号或-号后有一个空格;
  10.                 local convertCode=$(echo "$moveTime"|awk -F '[: ]' '{
  11.                         flag="";
  12.                         if($1=="-" || $1=="+"){
  13.                                 flag=$1;
  14.                                 sub($1,"");
  15.                         }
  16.                         seconds=$NF;
  17.                         if($(NF-1)) minutes=$(NF-1);
  18.                         if(NF-2>0) hours=$(NF-2);
  19.                         /** 判断&拼装 **/
  20.                         if(hours) hours=sprintf("%s%s hours ",flag,hours);
  21.                         if(minutes!="") minutes=sprintf("%s%s minutes ",flag,minutes);
  22.                         if(seconds!="") seconds=sprintf("%s%s seconds",flag,seconds);
  23.                         /* printf "%s %s %s %s\n",flag,hours,minutes,seconds; */
  24.                         printf "local moveTime="%s %s%s%s"\n",flag,hours,minutes,seconds;
  25.                 }')
  26.                 eval "$convertCode"
  27.                 #echo "moveTime =>: $moveTime"
  28.         fi
  29.         column -t -R 1 -s ":" -o ":"<<<$(
  30.                 printf "时间基点:%s\n" "$(date -d "$baseTime" +'%F %T')"
  31.                 date -d "${moveTime} ${baseTime}" +'偏移后的时间格式化:%F %T'$'\n''偏移后的时间戳:@%s'
  32.         )
  33. }
复制代码

使用方法:
  1. datetimecount 偏移量 [要偏移的时间基点]
  2. 注:时间基点可以省略,缺省时以当前时刻作为时间基点
复制代码

使用示例:
  1. # 计算 12:30 前进 19分21秒 秒后的时间
  2. datetimecount 19:21  12:30

  3. datetimecount 19:21  12:30   #+号表示时间向前推移,-号表示时间倒退,默认为+号时可省略
  4. ---
  5. # 计算 12:30 倒退 18分40秒 后的时间
  6. datetimecount -18:40 12:30
  7. ---
  8. # 另:支持指定 date 命令支持的日期时间描述类字符串
  9. eg:
  10. datetimecount '-18 mins -40 seconds' 12:30
复制代码

[color=var(--cnb-code-color,inherit)]YAML 复制 全屏

操作截图



本文来自博客园,作者:晴云孤魂,转载请注明原文链接:https://www.cnblogs.com/cnhack/p/17553830.html

小勐拉新金宝网投开户微3083036
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|知识学习 ( 鲁ICP备20015483号 )

GMT+8, 2024-4-21 13:19 , Processed in 0.065961 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表