一、时间获取
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)日期方面
:文章来源:https://www.toymoban.com/news/detail-426351.html
标记 | 含义 |
---|---|
%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 :
显示版本编号文章来源地址https://www.toymoban.com/news/detail-426351.html
到了这里,关于shell脚本:时间处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!