Shell脚本获取格式化日期与时间

Shell脚本获取格式化日期与时间总结,Linux的bash脚本对时间格式的支持超出了我的预想,支持多种格式的变化与输出。甚至比java的api还要方便,总结如下:

 

1、常用的取日期方法:

 

[plain] view plain copy

 

  1. #!/bin/sh  
  2. # upload logs to hdfs  
  3.   
  4.   
  5. source /etc/profile  
  6.   
  7.   
  8. #获取昨天日期 yyyyMMdd 格式  
  9. yesterday=`date --date='1 days ago' +%Y%m%d`  
  10. #获取昨天日期 yyyy-MM-dd 格式  
  11. yesterday2=`date --date='1 days ago' +%Y-%m-%d`  
  12.   
  13.   
  14. #获取今天日期 yyyyMMdd 格式  
  15. today=`date --date='0 days ago' +%Y%m%d`  
  16. #获取今天日期 yyyy-MM-dd 格式  
  17. today2=`date --date='0 days ago' +%Y-%m-%d`  
  18.   
  19.   
  20. #获取明天日期 yyyyMMdd 格式  
  21. today=`date --date='1 days' +%Y%m%d`  
  22. #获取明天日期 yyyy-MM-dd 格式  
  23. today2=`date --date='1 days' +%Y-%m-%d`  
  24.   
  25.   
  26. #获取当前时间 yyyy-MM-dd HH:mm:ss 格式  
  27. nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`  
  28. #获取当前日间 HH:mm:ss 格式  
  29. nowtime2=`date --date='0 days ago' +%H:%M:%S`  
  30.   
  31.   
  32. #获取1小时前时间 yyyy-MM-dd HH:mm:ss 格式  
  33. onehourage=`date --date='1 hours ago' "+%Y-%m-%d %H:%M:%S"`  
  34. #获取1小时后时间 yyyy-MM-dd HH:mm:ss 格式  
  35. onehourage2=`date --date='1 hours' "+%Y-%m-%d %H:%M:%S"`  
  36.   
  37.   
  38. #获取2小时前时间 yyyy-MM-dd HH:mm:ss 格式  
  39. twohourage=`date --date='2 hours ago' "+%Y-%m-%d %H:%M:%S"`  
  40. #获取2小时后时间 yyyy-MM-dd HH:mm:ss 格式  
  41. twohourage2=`date --date='2 hours' "+%Y-%m-%d %H:%M:%S"`  
  42.   
  43.   
  44. #获取1个月前时间 yyyy-MM-dd HH:mm:ss 格式  
  45. date --date='1 month ago' "+%Y-%m-%d %H:%M:%S"  
  46. #获取1个月加1天前时间 yyyy-MM-dd HH:mm:ss 格式  
  47. date --date='1 month ago + 1 day ago' "+%Y-%m-%d %H:%M:%S"  
  48. #获取1个月减1天前时间 yyyy-MM-dd HH:mm:ss 格式  
  49. date --date='1 month ago - 1 day ago' "+%Y-%m-%d %H:%M:%S"  
  50.   
  51.   
  52.   
  53. #获取1个月加1天加1小时加1分钟加1秒钟前时间 yyyy-MM-dd HH:mm:ss 格式  
  54. date --date='1 month ago + 1 day ago + 1 hour ago + 1 min ago + 1 sec ago' "+%Y-%m-%d %H:%M:%S"  
  55. #获取1个月加1天减1小时减1分钟减1秒钟前时间 yyyy-MM-dd HH:mm:ss 格式  可以 + - 滥用  
  56. date --date='1 month ago + 1 day ago - 1 hour ago - 1 min ago - 1 sec ago' "+%Y-%m-%d %H:%M:%S"  
  57.   
  58.   
  59. #获取1个月加1天加1小时加1分钟加1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式  
  60. date --date='1 month + 1 day  + 1 hour  + 1 min  + 1 sec ' "+%Y-%m-%d %H:%M:%S"  
  61.   
  62.   
  63. #获取1个月加1天减1小时减1分钟减1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式  
  64. date --date='1 month + 1 day  - 1 hour  - 1 min  - 1 sec ' "+%Y-%m-%d %H:%M:%S"  
  65.   
  66.   
  67. #获取1年后1个月加1天减1小时减1分钟减1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式  
  68. date --date='1 year 1 month + 1 day  - 1 hour  - 1 min  - 1 sec ' "+%Y-%m-%d %H:%M:%S"  
  69.   
  70.   
  71. #获取1年前1个月加1天减1小时减1分钟减1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式  
  72. date --date='1 year 1 month + 1 day  - 1 hour  - 1 min  - 1 sec ' "+%Y-%m-%d %H:%M:%S"  

 

 

2、取月周季度的首尾

  1. #月初:   
  2. m= `date --date='1 month' "+%Y-%m"`-01  
  3. #月末:   
  4. date --date="1 day ago $m" "+%Y-%m-%d"  
  5. #一周前 :   
  6. date --date="1 week ago "  "+%Y-%m-%d"  
  7. #星期:   
  8. date --date="0 days ago" "+%Y-%m-%d %u"  
  9. #季头:    
  10. 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  
  11. #季尾:    
  12. 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

 

  1. #! /bin/sh  
  2. today=$2  
  3. enddate=$1  
  4. while [[ $today -ge $enddate  ]]  
  5. do  
  6.         echo ${today}  
  7.   
  8.     today2=`date -d "0 day $today" +%Y-%m-%d`  
  9.       
  10.     echo ${today2}    
  11.     ###  to do this   
  12.   
  13.     today=`date -d "-1 day $today" +%Y%m%d`  
  14.   
  15.   
  16. done  

调用方式:

 

 

[plain] view plain copy

 

  1. bash testFor.sh  20150507 20160225  

 

 

说明:to do 放需循环调用的代码或者脚本

转载于:https://my.oschina.net/chaoshu/blog/1581913

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值