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 $time1
631126861 【时间戳】

(2)将增加时间变成秒

[root localhost ~]# time2=$((1*60*60+20*60))
[root localhost ~]# echo $time2
4800

(3)两个时间相加,计算出结果时间

time1=$(($time1+$time2))
time1=$(date +%Y-%m-%d %H:%M:%S -d "1970-01-01 UTC $time1 seconds");
echo $time1
1990-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-01 11: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 : 显示版本编号

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>