目录
- 天的处理
- 获取今天日期:`date +%Y%m%d` 或 ``date +%F`` 或 `date +%y%m%d `
- 获取昨天日期:`date -d yesterday +%Y%m%d`
- 获取前天日期:`date -d -2day +%Y%m%d`
- 依次类推比如获取10天前的日期:`date -d -10day +%Y%m%d`
- 或n天前的 `date -d "n days ago" +%y%m%d`
- 明天:`date -d tomorrow +%y%m%d`
- 获取当月第一天日期:`date +"%Y%m01"`
- 获取当月最后一天日期:`date -d "$(date -d "1 month" +"%Y%m01") -1 day" +"%Y%m%d"`
- 获取去年当天日期:`date -d -1year +%Y%m%d`
- 获取今年的第一天:`date "+%Y0101"`
- 获取今年的最后一天:`date "+%Y1231"`
- 月的处理
- 年的处理
- 周的处理
- 时间格式
在开发shell脚本中,对时间处理是难以避免的,所以接下来我们就来谈谈shell中时间处理的基本语法和他自带的函数。
天的处理
获取今天日期:date +%Y%m%d
或 date +%F
或 date +%y%m%d
获取昨天日期:date -d yesterday +%Y%m%d
获取前天日期:date -d -2day +%Y%m%d
依次类推比如获取10天前的日期:date -d -10day +%Y%m%d
或n天前的 date -d "n days ago" +%y%m%d
明天:date -d tomorrow +%y%m%d
获取当月第一天日期:date +"%Y%m01"
获取当月最后一天日期:date -d "$(date -d "1 month" +"%Y%m01") -1 day" +"%Y%m%d"
获取去年当天日期:date -d -1year +%Y%m%d
获取今年的第一天:date "+%Y0101"
获取今年的最后一天:date "+%Y1231"
date +%Y%m%d #获取今天日期
20190324
date +%F #获取今天日期
2019-03-24
date +%y%m%d #获取今天日期
190324
date -d yesterday +%Y%m%d #获取昨天日期
20190323
date -d -2day +%Y%m%d #获取前天日期
20190322
date -d 2day +%Y%m%d #获取两天后日期
20190326
date +"%Y%m01" #获取当月第一天日期
20190301
date -d "$(date -d "1 month" +"%Y%m01") -1 day" +"%Y%m%d" #获取当月最后一天日期
20190331
date -d -1year +%Y%m%d #获取去年当天日期
20180324
date "+%Y0101" #获取今年的第一天
20190101
date "+%Y1231"
20191231
如果是多日期变量处理,在参数-d后把变量加上就行
例:求日期变量today的前一天
today=20190101
date -d "${today} -1 day" +%Y%m%d
20181231
月的处理
获取本月日期:date +%Y%m
获取上月日期:date -d -1month +%Y%m
获取下月日期:date -d "1 month" +%Y%m
获取去年当月日期:date -d -1year +%Y%m
date +%Y%m #获取本月日期
201903
date +%m #获取本月月份
03
date -d -1month +%Y%m #获取上月日期,注意:如果参数后没有引号1和month中不能有空格
201902
date -d "1 month" +%Y%m #获取上月日期,注意:如果参数后有引号1和month中可以有空格
201904
date -d -1year +%Y%m
201803
年的处理
获取当年年份:date +%Y
或者 date +%y
获取明年年份:date -d 1year +%Y
获取去年年份:date -d -1year +%Y
date +%Y
2019
date +%y
19
date -d 1year +%Y
2020
date -d -1year +%Y
2018
周的处理
获取当天是本年的第几周:date +%W
(00…53,星期一为第一天)
获取当天是一周的第几天:date +%w
(0代表星期天)
获取上周的今天:date -d "-1 weeks" +%Y%m%d
下面脚本是获取某天的周一和周日
vi week.sh
#!/bin/bash
#取得入参的时间
indate=$1
echo indate=$indate
#如果没有输入参数,默认输入日期为今天
if [ ! $indate ]; then
echo 未输入指定日期,默认指定日期为今天
indate=$(date +%Y%m%d)
echo indate=$indate
fi
#取得统计日期(一般为入参的上周的今天)
upweekday=`date -d "$indate -1 weeks" +%Y%m%d`
echo upweekday=$upweekday
#得到是当周的周几 (0为星期日,1为星期一,...6为星期六)
whichday=$(date -d $indate +%w)
echo whichday=$whichday
#用(statday-whichday)+1,就是某周的第一天,这里是星期一
if [ $whichday == 0 ]; then
startday=`date -d "$indate -6 days" +%Y%m%d`
echo indate=$indate
else
startday=`date -d "$indate -$[${whichday} - 1] days" +%Y%m%d`
echo startday=$startday
fi
#某周的最后一天,星期日为最后一天
endday=`date -d "$startday +6 days" +%Y%m%d`
echo endday=$endday
chmod u+x week.sh
sh week.sh 20190103
结果为:
indate=20190103
upweekday=20181227
whichday=4
startday=20181231
endday=20190106
时间格式
% H 小时(00…23)
% I 小时(01…12)
% k 小时(0…23)
% l 小时(1…12)
% M 分(00…59)
% p 显示出AM或PM
% r 时间(hh:mm:ss AM或PM),12小时
% s 从1970年1月1日00:00:00到目前经历的秒数
% S 秒(00…59)
% T 时间(24小时制)(hh:mm:ss)
% X 显示时间的格式(%H:%M:%S)
% Z 时区 日期域
% a 星期几的简称( Sun…Sat)
% A 星期几的全称( Sunday…Saturday)
% b 月的简称(Jan…Dec)
% B 月的全称(January…December)
% c 日期和时间( Mon Nov 8 14:12:46 CST 1999)
% d 一个月的第几天(01…31)
% D 日期(mm/dd/yy)
% h 和%b选项相同
% j 一年的第几天(001…366)
% m 月(01…12)
% w 一个星期的第几天(0代表星期天)
% W 一年的第几个星期(00…53,星期一为第一天)
% x 显示日期的格式(mm/dd/yy)
% y 年的最后两个数字( 1999则是99)
% Y 年(例如:1970,1996等)