AI智能
改变未来

shell date日期函数处理

获取今天时期:

date +%Y%m%d

date +%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 “countday\”+′hourid=‘date−d\”countday\” +\’%Y%m%d\’`hour_id=`date -d \”countday\”+′houri​d=‘date−d\”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和日期之前,会导致报错
用参数calcmonthday决定往前或者往后排几天,主要用在处理每周一到周日、每月1号到月末这种日期calcstartday=‘date−d\”−1month−calc_monthday决定往前或者往后排几天,主要用在处理每周一到周日、每月1号到月末这种日期calc_start_day=`date -d \”-1 month -calcm​onthday决定往前或者往后排几天,主要用在处理每周一到周日、每月1号到月末这种日期calcs​tartd​ay=‘date−d\”−1month−(($calc_monthday-1)) day calcday\”+calcstartDay=‘date−d\”calc_day\” +%Y%m%d`calc_start_Day=`date -d \”calcd​ay\”+calcs​tartD​ay=‘date−d\”((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=0currentWeek=`date -d \"$calc_day\" +%w`#计算周报的时间未配置则默认为周一if [ ! -n \"$calc_weekday\" ]; thencalc_weekday=1fi#为了保证数据完整性,周报选择在配置每周几进行计算if [ $currentWeek -eq $calc_weekday ]thencalc_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\" ]; thencalc_monthday=2fiif [ $currentDay -eq $calc_monthday ]then# the first day of this monthcalc_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\" ];thencalc_day=$1fiif [ -n \"$2\" ];thenhour_id=$2#加1的目的是算出结束时间current_hour=`expr $2 + 1`if [ $current_hour -lt 10 ];thencurrent_hour=\"0$current_hour\"calc_onehour_ago_end=`date -d \" $calc_day\" +\"%Y-%m-%d $current_hour:00:00\" `elif [ $current_hour = 24 ];thencurrent_hour=\"00\"calc_onehour_ago_end=`date -d \"+1day $calc_day\" +\"%Y-%m-%d $current_hour:00:00\"`elsecalc_onehour_ago_end=`date -d \"$calc_day\" +\"%Y-%m-%d $current_hour:00:00\" `ficalc_onehour_ago_begin=`date -d \"$calc_day\" +\"%Y-%m-%d $hour_id:00:00\" `fi
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » shell date日期函数处理