shell命令格式嚴格,不像Python那樣命令行中可以添加空格。如等號兩邊無空格。有多余空格錯誤,日期date命令就是最明顯的例子。
命令格式:
date [-u] [-d datestr] [-s datestr] [--utc] [--universal][--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT][MMDDhhmm[[CC]YY][.ss]]
如:
date +%Y%m%d :以yyyymmdd格式輸出(20111118)date --date="1 day ago" +%Y%m%d :一天前的日期
date -d "-2 day 20111111" +%Y%m%d
day="20111111"
for i in `seq 0 6` :循環(huán)看 參數(shù)順序無關(guān),命令都一樣do date -d "$day +$i day" +%Y%m%d :正數(shù)可以省略符號 date +%Y%m%d -d "$day +$i day"
date +%Y%m%d -d "$i day $day "
date +%Y%m%d -d "+$i day $day " date +%Y%m%d -d $day
done
格式注意
1,date后面每個空格之間都是一個獨立的參數(shù),分別看做整體,用雙引號格式能看的更為清楚,如date "+%Y%m%d %H:%M:%S" -d "+1 hour"
i. -d“-2 day20111111”指定輸出內(nèi)容
ii. “+%Y%m%d”是一個整體,控制輸出格式,+后面無空格
2,參數(shù)順序無關(guān),如
date -d "-2 day 20111111" +%Y%m%d
date +%Y%m%d -d "-2 day 20111111"
date +%Y%m%d -d "20111111 -2 day"
都一樣。
3,獨立參數(shù)有無雙引號都行,
date -d 2014-02-13 +%s和date -d"2014-02-13" "+%s"是一樣的,還有date -d'2014-02-13' +%s
時間字符串的轉(zhuǎn)化:
用date 的輸出格式控制實現(xiàn),但“月日年”和“時分秒”必須分開處理,否則會無法識別。such as
2013-10-30 20:12:59 或者 20131030 20:12:59
注意:
1,二者用空格分割;
2,年月日作為整體,格式十分靈活,可以隨意寫。但時分秒必須用冒號”:”分開,否則無法識別。
A)字符串轉(zhuǎn)時間指定格式:
計算2011111前兩天
date -d "-2 day 20111111" +%Y%m%d (輸出為 20111109)
或者date --date="20130913"+%Y%m%d
B)字符串轉(zhuǎn)換為時間戳:
date -d "2010-10-18 00:00:00" +%s (輸出 1287331200)
-d參數(shù)指定字符串,+%s表示輸出時間戳。
C)時間戳轉(zhuǎn)換為字符串:
date -d '1970-01-01 UTC 1287331200 seconds' +"%Y-%m-%d %T"(輸出2010-10-18 00:00:00)
或者直接用@符號
date -d @1287331200 "+%Y-%m-%d
D)時間戳的日期計算:
seconds=`date -d "2010-10-18 00:00:00" +%s` #得到時間戳
seconds_new=`exPR $seconds + 86400` #加上一天的秒數(shù)86400
date_new=`date -d @$seconds_new "+%Y-%m-%d"` #獲得指定日前加上一天的日前
1)date時間計算,輸出用格式控制符:
date "+%Y-%m-%d %H:%M:%S" -d "-15 minute$yearof-$monthof-$dayof 20:12:59"
例子:
yearof="2013"
monthof="10"
dayof="30"
nowth=1
echo $nowth
echo $dayof
date "+%G-%m-%d %H:%M:%S" -d "2013-10-3020:12:59"
date "+%Y%m%d%H%M%S" -d "2013-10-30 20:12:59"
mytime=`date "+%Y-%m-%d %H:%M:%S" -d"$yearof-$monthof-$dayof 20:12:59"`
echo "$mytime is"
mytime=`date "+%Y-%m-%d %H:%M:%S" -d "-15 minute$yearof-$monthof-$dayof 20:12:59"`
echo "$mytime now is"
nowtime=`date "+%Y%m%d%H%M%S" -d"$yearof-$monthof-$dayof 20:12:59"`
#time must be with :, if no, wrong
echo "$nowtime is"
nowtime=`date "+%Y%m%d%H%M%S" -d "-15 minute${yearof}${monthof}${dayof} 20:12:59"`
echo "$nowtime now is"
2)轉(zhuǎn)為時間戳計算:
#date "+%Y-%m-%d %H:%M:%S" -d "20131030203859"
#date -d "$yearof-$monthof-$dayof 14:32:12" +%s
#date -d "$yearof-$monthof-$dayof 14:32:12" +%s
true_time="2013-09-15 15:36:11"
start_time=`date "+%Y%m%d%H0000" -d"$true_time"`
echo $start_time
##mytime=`date -d "$start_time" "+%s"`#invalid
test_time=`date "+%Y-%m-%d %H:00:00" -d"$true_time"`
echo $test_time
#轉(zhuǎn)時間戳
start_time=`date -d "$test_time" "+%s"`
echo $start_time
oneday="20141103"
dbname="wizad"
set -x
for i in `seq 0 60`
do
onedayid=$(date -d"${oneday} +$i day" +%Y-%m-%d)
Hive -e "use${dbname};
alter tablewizad_mdm_cleaned_hdfs add partition (day='${onedayid}',adn='3') location'/user/wizad/data/wizad/raw/${onedayid}/3_1/';
alter tablewizad_mdm_cleaned_hdfs add partition (day='${onedayid}',adn='5') location'/user/wizad/data/wizad/raw/${onedayid}/5_1/';
"
done
1,將增加時間變成秒
time2=$((1*60*60+20*60))
echo$time2
4800
2,兩個時間相加,計算出結(jié)果時間
time1=$(date +%s -d '1990-01-01 01:01:01')
time1=$(($time1+$time2))
time1=$(date +%Y-%m-%d/ %H:%M:%S -d"1970-01-01 UTC $time1 seconds");
echo $time1
1990-01-01 02:21:01
3,時間差計算方法
如:2010-01-01 與 2009-01-01 11:11:11 時間差
原理:同樣轉(zhuǎn)成時間戳,然后計算天,時,分,秒
time1=$(($(date +%s -d '2010-01-01') -$(date +%s -d '2009-01-01 11:11:11')));
echo time1
將time1 / 60 秒,就變成分了。
4,小時的計算:
date#當(dāng)前時間
current_time=`date "+%Y-%m-%d%H:00:00" -d "-1 hour"` #取一小時前的時間,分秒清零
echo $current_time
start_time=`date -d"$current_time" "+%s"`#轉(zhuǎn)化為時間戳
echo $start_time
end_time=`date "+%Y%m%d %H:%M:%S"-d "+1 hour ${current_time}"`#
echo $end_time
my_time=`date "+%Y-%m-%d%H:00:00"`
echo $my_time
上面兩個都是取當(dāng)前時間的分秒清零。
t_time=`date -d "$my_time""+%s"`
echo $t_time
t2_time=$((start_time+3600)) #注意,轉(zhuǎn)化為時間戳后可以直接計算,用shell的簡便計算符$((表達式)),直接求出一小時后的時間(時間戳格式)
echo $t2_time
新聞熱點
疑難解答