shell date日期函数处理

获取今天时期:date +%Y%m%ddate +%F 或 $(date +%y%m%d)
获取昨天时期:date -d yesterday +%Y%m%d
获取前天日期:date -d -2day +%Y%m%d

n天前的 date -d "n days ago" +%y%m%d
明天:date -d tomorrow +%y%m%d
注意以上中间有空格

1个小时之前的:date -d -1hour +'%Y-%m-%d %H:%M:%S'
要注意不是单引号是符号 date -d 是固定格式 写参数要用 "$countday",双引号加$的格式获取参数值,不写参数默认是取系统的当前时间,后面用+号和' '单引号放要转换的数据格式 countday=date -d -1hour +’%Y-%m-%d %H:%M:%S’calc_day=date -d “ c o u n t d a y " + ′ h o u r i d = ‘ d a t e − d " countday" +'%Y%m%d'` hour_id=`date -d " countday"+hourid=dated"countday” +"%H"`

calc_day_previous=date -d "-2 day $calc_day" +%Y%m%d
calc_day_previous=date +%Y%m%d -d "-2 day $calc_day"

注意:-d后面要紧跟你要处理的日期,-2是往前退2天,+%Y%m%d日期格式转换可以放到前面也可以放到后面,但是不能插到-d和日期之前,会导致报错
用参数 c a l c m o n t h d a y 决 定 往 前 或 者 往 后 排 几 天 , 主 要 用 在 处 理 每 周 一 到 周 日 、 每 月 1 号 到 月 末 这 种 日 期 c a l c s t a r t d a y = ‘ d a t e − d " − 1 m o n t h − calc_monthday决定往前或者往后排几天,主要用在处理每周一到周日、每月1号到月末这种日期 calc_start_day=`date -d "-1 month - calcmonthday1calcstartday=dated"1month(($calc_monthday-1)) day c a l c d a y " + c a l c s t a r t D a y = ‘ d a t e − d " calc_day" +%Y%m%d` calc_start_Day=`date -d " calcday"+calcstartDay=dated"((6+$calc_weekday)) day ago $calc_day" +%Y%m%d`

时间域
% 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等)
注意:只有超级用户才有权限使用date命令设置时间,一般用户只能使用date命令显示时间

周报日期处理(默认每周一计算上周一到周日数据):
#currentWeek取值0-6,当$calc_day为周日时,currentWeek=0
currentWeek=`date -d "$calc_day" +%w`
#计算周报的时间未配置则默认为周一
if [ ! -n "$calc_weekday" ]; then
	calc_weekday=1
fi
#为了保证数据完整性,周报选择在配置每周几进行计算
if [ $currentWeek -eq $calc_weekday ]
then	
	calc_start_Day=`date -d "$((6+$calc_weekday)) day ago $calc_day" +%Y%m%d`
	calc_end_Day=`date -d "$calc_weekday day ago $calc_day" +%Y%m%d`
fi
月报日期处理(默认每月1号到月底):
#为了保证数据完整性,月报选择在每个月2号进行计算
currentDay=`date -d $calc_day +%e`

#计算月报的时间未配置则默认2号
if [ ! -n "$calc_monthday" ]; then
	calc_monthday=2
fi

if [ $currentDay -eq $calc_monthday ]
then	
	# the first day of this month
	calc_start_day=`date +%Y%m%d -d "-1 month -$(($calc_monthday-1)) day $calc_day"`
	calc_end_day=`date +%Y%m%d -d "-$calc_monthday day $calc_day"`
fi

在实际工作中总是会遇到各种日期格式的,有时候需要对日期格式做各种处理
1、给的日期数据是 yyyyMMddHHmmss 例如:20200528091253
这个时候需要做数据的大小比较的时候就比较烦,可以通过如下格式转换成date格式的在进行比较,当位数不够的也可以直接进行拼接(注意:有些日期格式是年月日 时:分:秒.0)

concat(substr(starttime,0,4),'-',substr(starttime,5,2),'-',substr(starttime,7,2),' ',substr(starttime,9,2),':',substr(starttime,11,2),':',substr(starttime,13,2)) validtime,
concat(substr($calc_day,0,4),'-',substr($calc_day,5,2),'-',substr($calc_day,7,2),' 00:00:00.0')  createtime,

有时候给定一个时段,需要这个时段的开始时间,结束时间,可以做如下处理

#获取前一小时的时间(自动获取系统时间的时候)
countday=`date -d -1hour +'%Y-%m-%d %H:%M:%S'`
calc_day=`date -d "$countday" +'%Y%m%d'`
hour_id=`date -d "$countday" +"%H"`

calc_onehour_ago_begin=`date +"%Y-%m-%d %H:00:00" -d " -1 hour"`
calc_onehour_ago_end=`date +"%Y-%m-%d %H:00:00"`

#手动输入时间的时候
if [ -n "$1" ];then
	calc_day=$1
fi 
if [ -n "$2" ];then
	hour_id=$2
	#加1的目的是算出结束时间
  current_hour=`expr $2 + 1`
  if [ $current_hour -lt 10 ];then
      current_hour="0$current_hour"
      calc_onehour_ago_end=`date -d " $calc_day" +"%Y-%m-%d $current_hour:00:00" `
  elif [ $current_hour = 24 ];then
      current_hour="00"
      calc_onehour_ago_end=`date -d "+1day $calc_day" +"%Y-%m-%d $current_hour:00:00"`
  else
      calc_onehour_ago_end=`date -d "$calc_day" +"%Y-%m-%d $current_hour:00:00" `
  fi
  calc_onehour_ago_begin=`date -d "$calc_day" +"%Y-%m-%d $hour_id:00:00" `
  
fi
  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值