- 論壇徽章:
- 33
|
本帖最后由 Shell_HAT 于 2013-03-13 11:53 編輯
本帖最后由 Shell_HAT 于 2011-05-19 00:17 編輯
當(dāng)你遇到一個date命令不給力的系統(tǒng)時,可以試試這幾個小函數(shù)。
#日期轉(zhuǎn)天數(shù)- function date2days {
- echo "$*" | awk '{
- z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
- j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
- print j
- }'
- }
- date2days `echo "2010-08-18 18:59:19" | sed 's/-/ /g;s/:/ /g'`
復(fù)制代碼 #天數(shù)轉(zhuǎn)日期- function days2date {
- echo "$1" | awk '{
- a=$1+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
- d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
- dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
- printf ("%4d-%02d-%02d\n",yy,mm,dd)
- }'
- }
- days2date 14839
復(fù)制代碼 #日期轉(zhuǎn)分鐘- function date2minutes {
- echo "$*" | awk '{
- z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
- j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
- j=j*1440+$4*60+$5
- print j
- }'
- }
- date2minutes `echo "2010-08-18 18:59:19" | sed 's/-/ /g;s/:/ /g'`
復(fù)制代碼 #分鐘轉(zhuǎn)日期- function minutes2date {
- echo "$1" | awk '{
- i=$1; nn=i%60; i=int(i/60); hh=i%24; dd=int(i/24); i=int(i/24);
- a=i+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
- d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
- dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
- printf ("%4d-%02d-%02d %02d:%02d\n",yy,mm,dd,hh,nn)
- }'
- }
- minutes2date 21369299
復(fù)制代碼 #日期轉(zhuǎn)秒數(shù)- function date2seconds {
- echo "$*" | awk '{
- z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
- j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
- j=j*86400+$4*3600+$5*60+$6
- print j
- }'
- }
- date2seconds `echo "2010-08-18 18:59:19" | sed 's/-/ /g;s/:/ /g'`
復(fù)制代碼 #秒數(shù)轉(zhuǎn)日期- function seconds2date {
- echo "$1" | awk '{
- i=$1; ss=i%60; i=int(i/60); nn=i%60; i=int(i/60); hh=i%24; dd=int(i/24); i=int(i/24);
- a=i+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
- d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
- dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
- printf ("%4d-%02d-%02d %02d:%02d:%02d\n",yy,mm,dd,hh,nn,ss)
- }'
- }
- seconds2date 1282157959
復(fù)制代碼 #日期轉(zhuǎn)毫秒- function date2milliseconds {
- echo "$*" | awk '{
- z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
- j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
- j=j*86400+$4*3600+$5*60+$6
- printf ("%d%s\n",j,$7)
- }'
- }
- date2milliseconds `echo "2010-08-18 18:59:19.073" | sed 's/-/ /g;s/:/ /g;s/\./ /g'`
復(fù)制代碼 #毫秒轉(zhuǎn)日期- function milliseconds2date {
- echo "$1" | awk '{
- i=$1; ms=i%1000; i=int(i/1000); ss=i%60; i=int(i/60); nn=i%60; i=int(i/60); hh=i%24; dd=int(i/24);
- i=int(i/24);
- a=i+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
- d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
- dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
- printf ("%4d-%02d-%02d %02d:%02d:%02d.%03d\n",yy,mm,dd,hh,nn,ss,ms)
- }'
- }
- milliseconds2date 1282157959073
復(fù)制代碼 應(yīng)用實(shí)例:
計算今天的N天之后的日期
http://www.72891.cn/viewthread.php?tid=1799398&page=1#pid12986095
計算某天的N天之后的日期
http://www.72891.cn/viewthread.php?tid=1666874&page=2#pid12605722
計算上一個星期的全部日期
http://www.72891.cn/viewthread.php?tid=1754212&page=3#pid12579440
日期時間轉(zhuǎn)換成毫秒
http://www.72891.cn/viewthread.php?tid=1770107&page=2#pid12715151
日期時間轉(zhuǎn)換成秒
http://www.72891.cn/viewthread.php?tid=1772312&page=1#pid12737986
判斷一個數(shù)字是否為合法日期
http://www.72891.cn/viewthread.php?tid=1792476&page=2#pid12918659
計算10分鐘之前的時間
http://www.72891.cn/viewthread.php?tid=1842859&page=1#pid13341073
計算指定日期和當(dāng)前系統(tǒng)日期之家相差多少天
http://www.72891.cn/viewthread.php?tid=2316841&page=1#pid15618823
上個星期周一的日期
http://www.72891.cn/viewthread.php?tid=3680220&page=1#pid21909156
|
|