在Solaris中,我正在嘗試編寫一個shell腳本,將當前日期轉換爲Unix後的1/1/1970之後的天數。這是因爲etc/shadow不使用紀元時間,而是使用「日期格式」將當前日期轉換爲Unix時間戳,但使用日期
即「root:G9yPfhFAqvlsI:15841 ::::::」其中15841是日期。
所以基本上我用什麼命令找出現在的紀元時間,然後將其轉換爲天。
在Solaris中,我正在嘗試編寫一個shell腳本,將當前日期轉換爲Unix後的1/1/1970之後的天數。這是因爲etc/shadow不使用紀元時間,而是使用「日期格式」將當前日期轉換爲Unix時間戳,但使用日期
即「root:G9yPfhFAqvlsI:15841 ::::::」其中15841是日期。
所以基本上我用什麼命令找出現在的紀元時間,然後將其轉換爲天。
我發現了一些僞代碼,從基礎計算的話:
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}'
我把'truss/usr/bin/date 2>&1 | grep^time | awk -F「=」'{print $ 2}「'變成一個變量現在你知道我將如何使用」變量「/ 8600來分割變量嗎? – user3508234
@ user3508234 - 使用nawk的srand()會更容易。如果你正在運行bash,你可以像'((var = $(nawk'BEGIN {print srand()}')/ 86400))'一樣指定var。如果你仍然喜歡上面的方法,你可以在bash上使用'((var/= 86400))'或'var = \'echo $ var/86400 | bc \''在非bash上。 – alvits
@ user3508234:'truss/usr/bin/date 2>&1 | nawk'$ 1 ==「time()」{print int($ NF/86400)}'' –
您可能沒有GNU工具,這可能會使事情變得更容易。這是很簡單的,但:
perl -le 'print int(time/86400)'
如果你使用它來獲得一個uid,最好不要在同一天創建2個用戶。 –
謝謝@glennjackman 反正有沒有做這個沒有perl? – user3508234
的Solaris date
實用程序不支持%s
格式。但是,nawk
實用程序具有srand()
函數,當沒有參數傳遞給它時,該函數返回以秒爲單位的日期。
nawk 'BEGIN {print srand()}'
結果
1405529923
要獲得天,而不是秒,可以通過86400
nawk 'BEGIN {printf("%d", srand()/86400)}'
什麼是15841分,結果呢?大紀元開始後的秒數?如果是這樣,你應該能夠將它除以60 * 60 * 24以獲得天數。 – ahoffer
15841是1970年1月1日以後的天數,所以我試圖找出命令將今天的日期打印成天的格式@ahoffer – user3508234
您可以使用'echo $(($(nawk'BEGIN {print srand()}')/ 86400))'。 – alvits