shell中日期操作

1. date -d操作

date  +"%Y%m%d" -d  "+n days"         #今天的后n天日期  
date  +"%Y%m%d" -d  "-n days"         #今天的前n天日期

2. 常用日期格式输出

date +"%F"                                #输出: 2012-06-08
date +"%D"                                #输出: 06/08/12
date +"%Y%m%d %H:%M:%S"                   #输出: 20120608 04:52:28
date +"%Y%m%d"                            #输出: 20120608
date +"%Y%m%d %H:%M:%S" -d "+1 hours"     #输出: 20120608 05:52:43
date +"%Y%m%d %H:%M:%S" -d "+1 days"      #输出: 20120609 04:52:52
date +"%Y%m%d %H:%M:%S" -d "+1 months"    #输出: 20120708 04:52:56
date +"%Y%m%d %H:%M:%S" -d "+1 years"     #输出: 20130608 04:53:07
date +"%T"                                #输出: 05:03:21
date +"%F %T"                             #输出: 2012-06-08 05:03:34
date +"%D %T"                             #输出: 06/08/12 05:03:39

 3. 日期格式转换

# 字符串转时间戳
date -d "2010-10-18 00:00:00" +%s   #输出:1287331200
# 时间戳转字符串
date -d @1287331200  "+%Y-%m-%d"    #输出:2010-10-18

# 获取指定日期的后N天,如果是前N天,则第二部中间是 -
步骤1:得到时间戳           seconds=`date -d "2010-10-18 00:00:00" +%s` 
步骤2:
加上N天的秒数86400*N   seconds_new=`expr $seconds + 86400*N`
步骤3:
获得指定日前加上一天的日前  date_new=`date -d @$seconds_new "+%Y-%m-%d"`

4. 获取上月末和最近一年的日期

dt_curr=20190322

#当月初
dt=`date -d"${dt_curr} -0 days" "+%Y%m01"`  
#去年今月初
dt_lastyear=`date -d"${dt} -1 years" "+%Y%m01"`
#上月末
lastday=`date -d "${dt} -1 day" "+%Y%m%d"`
#去年今月末
lastday_lastyear=`date -d "${dt_lastyear} -1 day" "+%Y%m%d"` 

dt: 20190301

dt_lastyear: 20180301

lastday: 20190228

lastday_lastyear: 20180228

原文地址:https://www.cnblogs.com/30go/p/8302729.html