首先我們先來說說什么是shell下的時間戳:
自1970年1月1日(00:00:00 UTC/GMT)以來的秒數。它也被稱為Unix時間戳(Unix Timestam、Unix epoch、POSIX time、Unix timestamp)是從1970年1月1日(UTC/GMT的午夜)開始所經過的秒數,不考慮閏秒。
UNIX時間戳的0按照ISO 8601規范為:1970-01-01T00:00:00Z 一個小時表示為UNIX時間戳格式為:3600秒;一天表示為UNIX時間戳為86400秒,閏秒不計算。
shell下的時間加減法就是根據時間戳來實現的,時間戳對我們在shell下的操作非常的有用:
比如:計算某天的時間戳,也就是指定的某一個到1970年1月1日以來的秒數:
//從2014-12-05 19:45:44到1970-1-1總共的秒數 [root@node1 shell]# date -d "2014-12-05 19:45:44" +%s 1417779944 //如果知道某個時間戳,也可以計算出這個時間戳對應的時間日期 [root@node1 shell]# date --date=@1417779944 Fri Dec 5 19:45:44 CST 2014 [root@node1 shell]# date -d @1417779944 Fri Dec 5 19:45:44 CST 2014
知道這些之后那我們就可以計算某一天距離今天過了多少天了:
#!/bin/bash # first_stamp=`date -d "2014-12-05 19:45:44" +%s` #計算指定日期的時間戳 today_stamp=`date +%s` #計算當天的時間戳 let day_stamp=($today_stamp - $first_stamp) #當天的時間戳減去指定的時間戳 let day=($day_stamp/86400) #相差的時間戳除以一天的秒數就得到天數 echo $day
以下還有一些時間的計算方法:
[root@node1 shell]# echo $(date --date='3 day') //當天日期+3天 Fri Jan 16 11:55:02 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 day ago') //當天日期-3天 Sat Jan 10 11:55:10 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 month') //當天日期+3月 Mon Apr 13 11:55:17 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 month ago') //當天日期-3朋 Mon Oct 13 11:55:25 CST 2014 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 year') //當天日期+3年 Sat Jan 13 11:55:32 CST 2018 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 year ago') //當天日期-3年 Fri Jan 13 11:55:38 CST 2012 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 minute ') //當天日期+3秒 Tue Jan 13 11:58:44 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 minute ago') //當天日期-3秒 Tue Jan 13 11:52:52 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 hour ago') //當天日期-3小時 Tue Jan 13 08:56:00 CST 2015 [root@node1 shell]# [root@node1 shell]# echo $(date --date='3 hour') //當天日期+3小時 Tue Jan 13 14:56:06 CST 2015 [root@node1 shell]#
轉自:http://blog.51cto.com/tanxw/1602915