首页 > 系统相关 >Cygwin、Linux Bash计算某个时刻偏移一定时间长度后的时间通用函数:datetimecount

Cygwin、Linux Bash计算某个时刻偏移一定时间长度后的时间通用函数:datetimecount

时间:2023-07-14 15:33:33浏览次数:39  
标签:seconds moveTime hours datetimecount flag Cygwin Linux minutes

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

操作截图


标签:seconds,moveTime,hours,datetimecount,flag,Cygwin,Linux,minutes
From: https://www.cnblogs.com/cnhack/p/17553830.html

相关文章

  • Linux 服务器安全加固十条建议
    1、https://www.51cto.com/article/695880.html1、设置复杂密码服务器设置大写、小写、特殊字符、数字组成的12-16位的复杂密码,也可使用密码生成器自动生成复杂密码,这里给您一个链接参考:https://suijimimashengcheng.51240.com/ 复制echo "root:wgr1TDs2Mnx0XuAv" | c......
  • Linux版本分类
    Linux的发行版本大致可以分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本。前者以著名的RedHat (RHEL红帽)为代表,后者以Debian为代表Redhat系列的包管理方式采用的是基于RPM包和YUM包的管理方式,包分发方式是编译好的二进制文件RHEL(RedhatEnterpri......
  • Linux常用命令大全
    Linux常用命令大全1.Linux管理文件和目录的命令命令 功能 命令 功能Pwd 显示当前目录 ls 查看目录下的内容Cd 改变所在目录 cat 显示文件的内容Grep 在文件中查找某字符 cp 复制文件Touch 创建文件 mv 移动文件Rm 删除文件 rmd......
  • linux文件内容查看命令
    1、https://www.cnblogs.com/my-first-blog-lgz/p/13353051.html文件内容查看 1.cat:从第一行开始显示文件内容。用来读文章,或者读取配置文件 2.tac:从最后一行开始显示,可以看出tac是cat倒着写。 3.nl:显示的时候,顺便输出行号。看代码的时候希望显示行号。 4.more:一页一页显示......
  • 在vm-17版本上安装centos 8.5 版本的Linux操作系统
    1、新建虚拟机 2、选择安装模式 3、选择虚拟机硬件兼容性,选择默认的 4、客户端操作系统安装选择 5、选择安装的操作系统类型 6、虚拟机命名和存放路径修改 7、处理器内核配置 8、系统内存放分配,选择默认的 9、选择网络连接模式 10、选择控制器 11......
  • linux服务器安装环境和wdcp管理系统 V3最新版安装
    wdcp支持两种安装方式1源码编译此安装比较麻烦和耗时,一般是20分钟至一个小时不等,具体视机器配置情况而定2RPM包安装简单快速,下载快的话,几分钟就可以完成源码安装(ssh登录服务器,执行如下操作即可,需root用户身份安装)wgethttp://dl.wdlinux.cn:5180/lanmp_laster.tar.g......
  • java获取linux当前时间戳
    Java获取Linux当前时间戳在Java开发中,经常需要获取当前时间戳来进行日期时间的处理。本文将介绍如何在Java中获取Linux系统的当前时间戳,并提供代码示例。什么是时间戳?时间戳是指表示某个时间点的数字,通常为从某个固定的起始时间开始计算到该时间点的总秒数或毫秒数。时间戳广泛......
  • Linux安装MySQL 5.7
    Linux安装MySQL5.71、上传到/usr/local,解压并重命名为mysqltar-zxvfmysql-5.7.26-linux-glibc2.12-x86_64.tar.gz​mvmysql-5.7.26-linux-glibc2.12-x86_64mysql2、创建mysql用户,并授予权限addusermysql​chownmysql:mysql-R/usr/local/mysql......
  • 详解在Linux中修改Tomcat使用的jdk版本
    问题分析由于部署个人项目使用了openjdk11,但是我之前安装的是jdk1.8,jdk版本升级的后果就是,tomcat运行的时候报一点小bug(因为之前安装tomcat默认使用了系统的jdk版本)所以就想着把tomcat使用的jdk版本调回原来的,找了很多资料之后,决定在tomcat的运行文件中覆盖使用的jdk版本路径......
  • 从需求去理解 Linux dbus与基于dbus协议的无agent软件管理
    从需求去理解Linuxdbus与基于dbus协议的无agent软件管理 转载 WhatisIPCIPC[Inter-ProcessCommunication] 进程间通信,指至少两个进程或线程间传送数据或信号的一些技术或方法。在Linux/Unix中,提供了许多IPC。Unix七大IPC:Pipe:无名管道,最基本的IPC,单向通信,仅在......