2014-07-15 104 views
0

在Solaris中,我正在嘗試編寫一個shell腳本,將當前日期轉換爲Unix後的1/1/1970之後的天數。這是因爲etc/shadow不使用紀元時間,而是使用「日期格式」將當前日期轉換爲Unix時間戳,但使用日期

即「root:G9yPfhFAqvlsI:15841 ::::::」其中15841是日期。

所以基本上我用什麼命令找出現在的紀元時間,然後將其轉換爲天。

+0

什麼是15841分,結果呢?大紀元開始後的秒數?如果是這樣,你應該能夠將它除以60 * 60 * 24以獲得天數。 – ahoffer

+0

15841是1970年1月1日以後的天數,所以我試圖找出命令將今天的日期打印成天的格式@ahoffer – user3508234

+1

您可以使用'echo $(($(nawk'BEGIN {print srand()}')/ 86400))'。 – alvits

回答

0

我發現了一些僞代碼,從基礎計算的話:

if month > 2 then 
    month=month+1 
else 
    month=month+13 
    year=year-1 
fi 

day=(year*365)+(year/4)-(year/100)+(year/400)+(month*306001/10000)+day 
days_since_epoch=day-719591 

來源:http://www.unix.com/shell-programming-and-scripting/115449-how-convert-date-time-epoch-time-solaris.html)。在同一論壇主題,另一個海報說,這將在Solaris中工作:

truss /usr/bin/date 2>&1 | grep ^time | awk -F"= " '{print $2}' 
+0

我把'truss/usr/bin/date 2>&1 | grep^time | awk -F「=」'{print $ 2}「'變成一個變量現在你知道我將如何使用」變量「/ 8600來分割變量嗎? – user3508234

+0

@ user3508234 - 使用nawk的srand()會更容易。如果你正在運行bash,你可以像'((var = $(nawk'BEGIN {print srand()}')/ 86400))'一樣指定var。如果你仍然喜歡上面的方法,你可以在bash上使用'((var/= 86400))'或'var = \'echo $ var/86400 | bc \''在非bash上。 – alvits

+0

@ user3508234:'truss/usr/bin/date 2>&1 | nawk'$ 1 ==「time()」{print int($ NF/86400)}'' –

1

您可能沒有GNU工具,這可能會使事情變得更容易。這是很簡單的,但:

perl -le 'print int(time/86400)' 
+0

如果你使用它來獲得一個uid,最好不要在同一天創建2個用戶。 –

+0

謝謝@glennjackman 反正有沒有做這個沒有perl? – user3508234

0

的Solaris date實用程序不支持%s格式。但是,nawk實用程序具有srand()函數,當沒有參數傳遞給它時,該函數返回以秒爲單位的日期。

nawk 'BEGIN {print srand()}' 

結果

1405529923 

要獲得天,而不是秒,可以通過86400

nawk 'BEGIN {printf("%d", srand()/86400)}'