2014-04-01 13 views
1

我有日期的格式如下這是一個數據庫查詢結果:猛砸了多少天,因爲

yyyy-mm-dd-hh.mm.ss.mmmmmm 

例如

myDate=2014-03-28-23.05.04.000000 

我試圖

$((($(date +%s) - $(date -d "${myDate}" +%s)) /(24 * 60 * 60))) 

但它給我日期無效錯誤。

我想找出它有多少天以來指明MyDate。根據小時數,分鐘數和秒數,我需要將結果向上或向下取整,例如結果可以是2.5天或1.6等。

回答

3

只需要調整分隔一下:

$ date -d "$(sed 's/-/ /3; s/\./:/1; s/\./:/1' <<< $myDate)" +%s 
1396062304 

更改第三連字符的空間,然後第一個點更改爲一個冒號,然後(現在的)第一個點更改爲一個冒號。

然後

$ echo $((($(date +%s) - $(date -d "$(sed 's/-/ /3; s/\./:/1; s/\./:/1' <<< $myDate)" +%s)) /(24 * 60 * 60))) 
2 
2

你必須使用日期-f指定輸入格式。例如

date -d -f %Y-%m-%d-%h.%m.%S.?????? "$PmyDate}" +%s 

(我不確定mmmmmm指定的是什麼)此格式使用strptime函數;對此的參考是http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html

+1

想必MMMMMM是微秒 –

+0

啊,好,我不知道是否strptime有一個格式說明。如果它不會產生如此大的差異,你可能想要剝離它。 (你正在與幾天工作,你不需要那麼精確)。 – cheshircat

+0

這似乎是BSD'date':「-f使用input_fmt作爲格式字符串來解析提供的new_date ...」。但問題是標記爲Linux,所以我希望GNU'date'有效,在這種情況下'-f'表示從文件中讀取日期 - 而不是你想要的。 –