2012-01-09 263 views
0

在工作中,所有的日子配置文件都會生成新的並附加 會話編號。 公司上市Feb 16,而86400秒 在一天內。該會話數量減去公司從seconds_since_last_day開始 天和加入產生零點幾的date命令在bash shell腳本中

這纔是關鍵與天CONFIG文件交互。我得到這個 - 但我不知道 瞭解

date -ud "$distance days ago 00:00:00"

這是自1970年以來的秒數嗎?

if $session; then 
     # return the session of the last day 
     seconds_since_day_one=`date -ud "Feb 16 2002" +"%s"` 
     seconds_since_last_day=`date -ud "$distance days ago 00:00:00" +"%s"` 
     days_between=`printf "%010d" $(((seconds_since_last_day - seconds_since_day_one)/86400))` 
     # Truncate on the left to 9 bytes to leave room 
     # to append the engine suffix for your environment 
     echo $days_between | awk '{l=length($1); print substr($1, (l-8), l)}' 

回答

0

選項-d到date提供了一個通用字符串來獲取日期。

因此,例如,date -d yesterday將打印昨天的日期,並且date -d 'yesterday 12:00 AM'將打印昨天的日期,時間設置爲12:00 AM。因此,date -d 6 days ago 00:00:00將打印6天前的日期,時間設置爲00:00:00。我希望它能回答你的問題。

格式+「%s」告訴date打印1970年代替日期的秒數。

+0

if'date -d 6 days ago' will print the date from six days ago,and'date -ud「$ distance days ago 00:00:00」'= Sun Jan 8 00:00:00 UTC 2012(昨天的日期)和'日期-ud「$ distance days 00:00:00」+「%s」會給我 - 1325980800 $ distance的值是多少?因爲我沒有看到$距離有任何價值。這個shell腳本給了我正確的會話。 – capser 2012-01-09 23:24:21

+0

是$ distance null? – capser 2012-01-09 23:25:20

+0

因爲如果距離爲空,我認爲它會打破日期命令,但它似乎沒有破壞任何東西。 – capser 2012-01-09 23:26:30

2

date -ud "$distance days ago 00:00:00"本身只是以一種非常可讀的格式打印日期,但是當您添加FORMAT字符串來控制輸出+"%s"確實意味着所謂的Unix時間中的數字(從1970-01-01 00:00:00 UTC)。

如果變量$distance設置爲一個數字,它將顯示日期前幾天的日期,如果其設置爲0,則表示今天,1表示昨天,2表示前一天,等等。爲了更好地理解這些格式和相關的關鍵字,GNU coreutils軟件包中還有相當好的文檔(在其他地方)。

檢查以下網址:
http://www.gnu.org/software/coreutils/manual/html_node/Relative-items-in-date-strings.html#Relative-items-in-date-strings
http://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html
http://www.gnu.org/software/coreutils/manual/html_node/date-invocation.html#date-invocation

Unix時間的維基百科的解釋:
http://en.wikipedia.org/wiki/Unix_time