0


shell脚本:时间处理

本文内容目录:

一、时间获取

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 :

显示版本编号

标签: linux shell

本文转载自: https://blog.csdn.net/qq_16268979/article/details/127662170
版权归原作者 啊荻~ 所有, 如有侵权,请联系我们删除。

“shell脚本:时间处理”的评论:

还没有评论