Shell脚本获取格式化日期与时间总结,Linux的bash脚本对时间格式的支持超出了我的预想,支持多种格式的变化与输出。甚至比java的api还要方便,总结如下:
1、常用的取日期方法:
#!/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"
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、循环取日期
#! /bin/sh
today=$2
enddate=$1
while [[ $today -ge $enddate ]]
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`
调用方式:
bash testFor.sh 20150507 20160225
说明:to do 放需循环调用的代码或者脚本
# 等号两边不能有空格,之前错误一直出在这里
yesterday=`date -d yesterday +%Y-%m-%d`
echo 'yesterday : ' $yesterday
printf 'yesterday is %s' $yesterday
# 前一天的
日期
date1=$(date -d "-1 day " +%Y-%m-%d)
echo '前一天:'$date1
# 前两天的
日期
date2=$(date -d "-2 day " +%Y-%
bash
脚本
改进
上次的博客强行传递的参数为20200101 20200131 这样的不跨月的参数,在使用中还是很不方便.
如果想跨月呢?这就需要涉及bash中
时间
格式化
的知识点了.
1,
时间
格式化
关于概念性的东西,可以参考这个链接,写的很好了
参考链接:https://blog.csdn.net/classhao1/article/details/8182733
#等号两边不能有空格,之前错误一直出在这里
yesterday=`date -d last-day +%Y-%m-%d`
echo $yest
echo "现在
时间
:`date '+%Y%m%d %T'`"
echo "现在
时间
:`date '+%Y%m%d %H%M%S'`"
echo `date '+%Y%m%d-%H%M%S'`
t3=`date '+%Y-%m-%d %H:%M:%S'`
echo $t3
你可能会觉得这个问题会很简单,因为百度一下就会有呀,为什么我要记录下来还是写一篇博客呢?因为呀,我是一名运维实习生,每天都需要备份数据库,
时间
日期
是非常重要的,可以确定数据文件的唯一性。
那么我们开始吧!
问题:需要给每一个文件按照规范命名,包括前缀,IP地址、端口、创建
时间
、后缀等 例如:DATA_TEXT_NCAYU_192.168.149.135_3306_20210316233139.sql
[root@ncayu618 ncayu]# vim date_backup.sh
#!/b.
这里的%Y,%m,%d分别指代年,月,日。 %H,%M,%S分别指代时,分,秒
%Y,%m,%d之间的符号可以修改,可以用 - ,也可以用~,汉字等作为分隔符
date +"%Y年%m月%d日 %H:%M:%S"
像这样用汉字作为分隔符号也是可以的
对
日期
进行加减操作
加一天 date +"%Y-%m-%d" --date="+1 day"
里面的数字也可以修改,修改增加的天数,下面几项
可以使用date命令来
获取
当前
日期
,并使用
格式化
选项来指定
日期
格式。例如,要
获取
当前
日期
的年月日,并将其
格式化
为20230504的形式,可以使用如下的
shell
脚本
:
#!/bin/bash
date=$(date +"%Y%m%d")
echo $date
运行
脚本
后,将会输出当前
日期
的年月日,格式为20230504的形式。
[解决]Hive执行语句:Unable to create temp file for insert values Expression of type TOK_FUNCTION not suppor
2301_76348976:
[解决]presto查询中The node may have crashed or be under too much load.的问题
skillsflow:
Spark-MLlib实例——决策树
python基础练习(二)—— 数据分析包numpy数组操作
IT_community:
[解决]presto查询中The node may have crashed or be under too much load.的问题
stevensam_lin: