linux中经常会对时间进行处理,下面介绍一下不同情况下的时间处理方式:
##1天之前(正负数字代表加减的天数)
v_few_day_ago=`date -d "-1days" +%Y%m%d`
v_few_day_ago=`date -d "1 days ago" +%Y%m%d`
v_few_day_ago=$(date +"%Y-%m-%d" --date '-1days')
###去年同期
v_lastyear_date=`date -d "-1 years -1 days " +"%Y-%m-%d"`
v_lastyear_date=`date -d "1 year ago 1 day ago" +"%Y-%m-%d"`
##1个月之前
v_months_ago=`date -d "-1 months" +"%Y-%m-%d"`
v_months_ago=$(date +"%Y-%m-%d" --date '1month ago')
======根据指定时间进行推算===========
#今天日期
start_date=`date +"%Y-%m-%d"`
##一个月前
v_few_months_ago=`date -d "$start_date 1 month ago" +"%Y-%m-%d"`
##本月1号
v_monthfirst_date=`date -d"$start_date" +"%Y-%m-"`"01"
##一年前的月初
v_lastyear_date=`date +"%Y-%m-" -d "$start_date -1 years"`"01"
##今年年初
v_yearfirst_date=`echo $start_date|cut -c1-4`"-01-01"
##上一年初
v_lastyearfirst_date=`date -d"$start_date -1 years" +"%Y" `"-01-01"
使用实例:
#################################################################################
#get_date_timekey 20240101073000-20240102073000算为一天
#################################################################################
timekey=20240102073000
day_id=${timekey:0:8}
hour_id=${timekey:8:6}
if [ $hour_id -lt "073000" ]
then
date_timekey=`date -d "1 day ago ${day_id}" +%Y%m%d`
else
date_timekey=$day_id
fi
echo $date_timekey
#################################################################################
#get_shift_timekey 第一天7:30到第二天7:30分为两个周期
#################################################################################
timekey='20240101073000'
day_id=${timekey:0:8}
hour_id=${timekey:8:6}
date_time="${timekey:0:4}-${timekey:4:2}-${timekey:6:2} ${timekey:8:2}:${timekey:10:2}"
if [ $hour_id -ge "073000" -a $hour_id -lt "193000" ]
then
shift_timekey=${day_id}" 073000"
elif [ $hour_id -ge "193000" ]
then
shift_timekey=${day_id}" 193000"
else
date_2_second=$(date -d "${date_time}" +%s)
date_2_second1=$[ date_2_second - 86400 ]
shift_timekey=`date -d @${date_2_second1} +"%Y%m%d"`" 193000"
fi
echo $shift_timekey
#################################################################################
#get_hour_timekey 每个小时半点到下个小时半点为一个周期
#################################################################################
timekey=20240101000000
date_time="${timekey:0:4}-${timekey:4:2}-${timekey:6:2} ${timekey:8:2}:${timekey:10:2}"
v_date_second=$(date -d "${date_time}" +%s)
v_date_half_hour_ago=$[ v_date_second - 1800 ]
v_hour_timekey=`date -d @${v_date_half_hour_ago} +"%Y%m%d%H"`30
echo $v_hour_timekey