Shell脚本获取格式化日期与时间总结,Linux的bash脚本对时间格式的支持超出了我的预想,支持多种格式的变化与输出。甚至比java的api还要方便,总结如下:
1、常用的取日期方法:
[plain] view plain copy
- #!/bin/sh
- # upload logs to hdfs
- source /etc/profile
- #获取昨天日期 yyyyMMdd 格式
- yesterday=`date --date='1 days ago' +%Y%m%d`
- #获取昨天日期 yyyy-MM-dd 格式
- yesterday2=`date --date='1 days ago' +%Y-%m-%d`
- #获取今天日期 yyyyMMdd 格式
- today=`date --date='0 days ago' +%Y%m%d`
- #获取今天日期 yyyy-MM-dd 格式
- today2=`date --date='0 days ago' +%Y-%m-%d`
- #获取明天日期 yyyyMMdd 格式
- today=`date --date='1 days' +%Y%m%d`
- #获取明天日期 yyyy-MM-dd 格式
- today2=`date --date='1 days' +%Y-%m-%d`
- #获取当前时间 yyyy-MM-dd HH:mm:ss 格式
- nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
- #获取当前日间 HH:mm:ss 格式
- nowtime2=`date --date='0 days ago' +%H:%M:%S`
- #获取1小时前时间 yyyy-MM-dd HH:mm:ss 格式
- onehourage=`date --date='1 hours ago' "+%Y-%m-%d %H:%M:%S"`
- #获取1小时后时间 yyyy-MM-dd HH:mm:ss 格式
- onehourage2=`date --date='1 hours' "+%Y-%m-%d %H:%M:%S"`
- #获取2小时前时间 yyyy-MM-dd HH:mm:ss 格式
- twohourage=`date --date='2 hours ago' "+%Y-%m-%d %H:%M:%S"`
- #获取2小时后时间 yyyy-MM-dd HH:mm:ss 格式
- twohourage2=`date --date='2 hours' "+%Y-%m-%d %H:%M:%S"`
- #获取1个月前时间 yyyy-MM-dd HH:mm:ss 格式
- date --date='1 month ago' "+%Y-%m-%d %H:%M:%S"
- #获取1个月加1天前时间 yyyy-MM-dd HH:mm:ss 格式
- date --date='1 month ago + 1 day ago' "+%Y-%m-%d %H:%M:%S"
- #获取1个月减1天前时间 yyyy-MM-dd HH:mm:ss 格式
- date --date='1 month ago - 1 day ago' "+%Y-%m-%d %H:%M:%S"
- #获取1个月加1天加1小时加1分钟加1秒钟前时间 yyyy-MM-dd HH:mm:ss 格式
- date --date='1 month ago + 1 day ago + 1 hour ago + 1 min ago + 1 sec ago' "+%Y-%m-%d %H:%M:%S"
- #获取1个月加1天减1小时减1分钟减1秒钟前时间 yyyy-MM-dd HH:mm:ss 格式 可以 + - 滥用
- date --date='1 month ago + 1 day ago - 1 hour ago - 1 min ago - 1 sec ago' "+%Y-%m-%d %H:%M:%S"
- #获取1个月加1天加1小时加1分钟加1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式
- date --date='1 month + 1 day + 1 hour + 1 min + 1 sec ' "+%Y-%m-%d %H:%M:%S"
- #获取1个月加1天减1小时减1分钟减1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式
- date --date='1 month + 1 day - 1 hour - 1 min - 1 sec ' "+%Y-%m-%d %H:%M:%S"
- #获取1年后1个月加1天减1小时减1分钟减1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式
- date --date='1 year 1 month + 1 day - 1 hour - 1 min - 1 sec ' "+%Y-%m-%d %H:%M:%S"
- #获取1年前1个月加1天减1小时减1分钟减1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式
- date --date='1 year 1 month + 1 day - 1 hour - 1 min - 1 sec ' "+%Y-%m-%d %H:%M:%S"
2、取月周季度的首尾
- #月初:
- m= `date --date='1 month' "+%Y-%m"`-01
- #月末:
- date --date="1 day ago $m" "+%Y-%m-%d"
- #一周前 :
- date --date="1 week ago " "+%Y-%m-%d"
- #星期:
- date --date="0 days ago" "+%Y-%m-%d %u"
- #季头:
- date -d "`awk -F- '$2%3==1{print $1FS$2FS"01";next}$2%3==2{print $1FS$2-1FS"01";next}{print $1FS$2-2FS"01"}' <<<2014-1-07`" +%F
- #季尾:
- date -d "`awk -F- '$2%3==1{print $1FS$2+3FS"01";next}$2%3==2{print $1FS$2+2FS"01";next}{print $1FS$2+1FS"01"}' <<<2014-1-07` -1 day" +%F
3、循环取日期
[plain] view plain copy
- #! /bin/sh
- today=$2
- enddate=$1
- while [[ $today -ge $enddate ]]
- do
- echo ${today}
- today2=`date -d "0 day $today" +%Y-%m-%d`
- echo ${today2}
- ### to do this
- today=`date -d "-1 day $today" +%Y%m%d`
- done
调用方式:
[plain] view plain copy
- bash testFor.sh 20150507 20160225
说明:to do 放需循环调用的代码或者脚本