2009-02-18 32 views

回答

0

那些可能是日子,但我不知道;這也不是一個編程問題。

1

使用源,盧克:

sprintf(length, "(%d+%02d:%02d)", days, hours, mins); 

這是從sysvinit源包在Debian。

暗示那些沒有C知識的人:這是天數。

+0

什麼?這是錯誤的答案? – hop 2009-02-18 02:12:15

1

圓括號之間的字符串是會話的持續時間。正如你注意到的,時間是結束時間和開始時間之間的差異。 2+是天數hop noted

在某些時候,這個問題可能應該轉移到服務器故障,因爲它最有可能是系統管理員感興趣的。

一旦你知道你在看什麼,這是一個相當可讀的格式。如果我正在設計輸出,我想我會讓星期幾爲可選項,並將整個結束日期放在字符串中。更好的辦法是讓日期戳是可配置的。這樣,輸出可以更容易地被另一個程序使用。

實際持續時間,如果用戶退出的會話是很容易用正則表達式來挑選出:

$ last | perl -lne 'print "$2 days, $3 hours, $4 minutes" if /\(((\d+)\+)(\d{2}):(\d{2})\)$/' 
17 days, 05 hours, 23 minutes 
3 days, 23 hours, 16 minutes 
14 days, 06 hours, 09 minutes 
23 days, 04 hours, 54 minutes 
16 days, 06 hours, 57 minutes 
...