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 : 显示版本编号

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~晓广~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值