本文内容目录:
一、时间获取
1、现在时间
date-d now
date
2、获取当前时间的日期
date +"%Y-%m-%d"date +"%F"
3、获取当前的时间的各指标
date +%H #小时date +%M #分钟date +%S #秒date +%T #时间date +%w #星期date-d"-1 day" +%F # 前一天
4、获取昨天
date-d yesterday # 这样是未经过任何的格式化,比较难看date-d yesterday +"%Y%m%d"# 这样是经过格式化的
5、获取明天
date-d tomorrw
date-d tomorrw +"%Y%m%d"date +%Y%m%d -d"+1 day"date +"%Y%m%d"-d'+1 day'# 这里引号不是必须的date +%Y%m%d --date"+1 day"date +"%Y%m%d"--date'+1 day'
6、获取本月
date +"%Y%m"
7、获取下月
date-d"1month" +"%Y%m"
8、获取上月
date-d"-1month" +"%Y%m"
9、计算指定日期的前一天的日期
date-d"yesterday 20150401 " +%Y%m%d
10、如果获取当前日期的前一天
date-d"yesterday" +%Y%m%d
11、计算指定日期的前几天(例如计算20190716的前10天),如果是负数的话,则会往前数
date-d"10 day ago 20190716" +%Y%m%d
date-d"10 day ago 2019-07-16" +%Y%m%d
12、计算当前日期的前几天(例如计算当前日期的前10天),如果是负数的话,则会往前数
date-d"10 day ago" +%Y%m%d
13、获取指定小时点之后的时间
date-d"20190716 12 3 hour" +"%Y%m%d%H"
表示2019年07月16日12点 向后移动三个小时的时间,运行结果为:2019071615
14、获取当前时间点之后的几小时的时间点
date-d"3 hour" +"%Y%m%d%H"
表示获取当前时间点3小时之后的时间,结果精确到小时
15、获取指定时间点之后几分钟
date-d"20190716 21:15 10 minute" +"%Y%m%d%H%M"
表示2019年07月16日21时15分在10分钟的时间点,精确到分
16、获取当前时间点之后的几分钟
date-d"10 minute" +"%Y%m%d%H%M"
二、时间转换
1、获取当前时间
date_time=`date +"%Y%m%d%H%M"`
//截取想要的时间
date_d=${date_time:0:8}date_H=${date_time:8:2}date_M=${date_time:10:2}
2、5分钟之前
date_5_ago=`date-d"${date_d}${date_H}:${date_M} 5 minute ago" +"%Y%m%d%H%M"` //计算已知时间的前XX分钟
3、将时间转换为时间戳
time1=`date-d"$date_5_ago" +%s `time2=`date-d"$date_time" +%s`
4、时间戳相减
time=$(($time1 - $time2))
5、将时间戳转换为分钟
time_c=`date-d @$time "+%M"`
6、计算执行时间
starttime=`date +'%Y-%m-%d %H:%M:%S'`
//执行代码
endtime=`date +'%Y-%m-%d %H:%M:%S'`start_seconds=$(date--date="$starttime" +%s)end_seconds=$(date--date="$endtime" +%s)echo"本次运行时间: "$((end_seconds-start_seconds))"s"
三、时间计算
1、时间加减
这里处理方法,是将基础的时间转变为时间戳,然后,需要增加或者改变时间,变成 秒。
如:1990-01-01 01:01:01 加上 1小时 20分
处理方法:
(1)将基础时间转为时间戳
time1=$(date +%s -d'1990-01-01 01:01:01')echo$time1631126861 【时间戳】
(2)将增加时间变成秒
[root localhost ~]# time2=$((1*60*60+20*60))[root localhost ~]# echo $time24800
(3)两个时间相加,计算出结果时间
time1=$(($time1+$time2))time1=$(date +%Y-%m-%d\ %H:%M:%S -d"1970-01-01 UTC $time1 seconds");echo$time11990-01-01 02:21:01
2、时间差计算方法
如:2010-01-01 与 2009-01-01 11:11:11 时间差
原理:
同样转成时间戳,然后计算天,时,分,秒
time1=$(($(date +%s -d '2010-01-01')- $(date +%s -d '2009-01-0111:11:11')));echo time1
将time1 / 60 秒,就变成分了。
四、date详解
1、使用权限 :
所有使用者
2、使用方式 :
date[-u][-d datestr][-s datestr][—utc][—universal][—date=datestr][—set=datestr][—help][—version][+FORMAT][MMDDhhmm[[CC]YY][.ss]]
3、说明 :
date 能用来显示或设定系统的日期和时间,在显示方面,使用者能设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :
(1)
时间方面
:
标记含义%印出% %n下一行%t跳格%H小时(00…23)%I小时(01…12)%k小时(0…23)%l小时(1…12)%M分钟(00…59)%p显示本地 AM 或 PM%r直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)%s从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 %S : 秒(00…61)%T直接显示时间 (24 小时制)%X相当于 %H:%M:%S%Z显示时区
(2)
日期方面
:
标记含义%a星期几 (Sun…Sat)%A星期几 (Sunday…Saturday)%b月份 (Jan…Dec)%B月份 (January…December)%c直接显示日期和时间%d日 (01…31)%D直接显示日期 (mm/dd/yy)%h同 %b%j一年中的第几天 (001…366)%m月份 (01…12)%U一年中的第几周 (00…53) (以 Sunday 为一周的第一天的情形)%w一周中的第几天 (0…6)%W一年中的第几周 (00…53) (以 Monday 为一周的第一天的情形)%x直接显示日期 (mm/dd/yy)%y年份的最后两位数字 (00.99)%Y完整年份 (0000…9999)
若是不以加号作为开头,则表示要设定时间,而时间格式为
MMDDhhmm[[CC]YY][.ss]
,
其中 MM 为月份,
DD 为日,
hh 为小时,
mm 为分钟,
CC 为年份前两位数字,
YY 为年份后两位数字,
ss 为秒数
把计 :
-d datestr :
显示 datestr 中所设定的时间 (非系统时间)
--help :
显示辅助讯息
-s datestr :
将系统时间设为 datestr 中所设定的时间
-u :
显示目前的格林威治时间
--version :
显示版本编号
版权归原作者 啊荻~ 所有, 如有侵权,请联系我们删除。