赞
踩
man date 可以直接查看日期的格式
列出常用的年月日
年
%y last two digits of year (00…99)
%Y year
月
%m month (01…12)
周
%u day of week (1…7); 1 is Monday
%U week number of year, with Sunday as first day of week (00…53)
日
%d day of month (e.g, 01)
%e day of month, space padded; same as %_d
小时
%H hour (00…23)
分钟
%M minute (00…59)
秒
%S second (00…60)
其他
%j day of year (001…366)
%T time; same as %H:%M:%S
%D date; same as %m/%d/%y
$ date -d "2012-04-10 -1 day " +%Y-%m-%d 2012-04-09 $ date -d "2012-04-10 +1 day " +%Y-%m-%d 2012-04-11 $ date -d "-1 week " +%Y-%m-%d 2012-04-15 $ date -d "+1 week " +%Y-%m-%d 2012-04-29 $ date -d "+1 month " +%Y-%m-%d 2012-05-22 $ date -d "-1 month " +%Y-%m-%d 2012-03-22 $ date -d "-1 year " +%Y-%m-%d 2011-04-22 $ date -d "+1 year " +%Y-%m-%d 2013-04-22
需要注意的是 +1 month 这个动作有可能并不会如你所愿。
例如
# 如果是5月31,想要得到6月30,结果会不如预期
date -d "2020-05-31 +1 month " +%Y-%m-%d
2020-07-01
# 如果是2月28,想要得到3月31,则会不如预期
date -d "2020-02-28 +1 month " +%Y-%m-%d
2020-03-28
原因是 +1 month 操作的是:加当前month天数。
此时如果想要获得月,可以先格式化为 当前月第一天,再使用+1 month 得到下个月,再做相应的数据格式换算。
# 格式化为这个月第一天
begin_date=date -d "${date_variable}" +%Y-%m-%01
# 得到下一个月第一天
next_month=date-d"$begin_date +1 month" +%Y-%m-%d
日期的比较用 > 和 <
shell 也用 < 和 > 操作符进行重定向,所以必须用 < 或 > 加以转义
begin_date=$1
end_date=$2
sql_file=$3
begin_date=`date -d"$begin_date" "+%Y-%m-01"`
while [ "$begin_date" \< "$end_date" ]
do
#spark-sql --hiveconf belong_date=$begin_date -f $sql_file
begin_date=`date -d"$begin_date +1 month" +%Y-%m-%d`
echo $begin_date
done
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。