2014-02-26 79 views
0

我工作的一個IRC Twitch.tv BOT(PircBot)創建一個定時器,我想實現正常運行時間chatcommand這將顯示流在線多長時間!的Java:沒有GUI

我在谷歌搜索了一下,我只找到這需要一個GUI解決方案。

能Some1告訴我什麼庫是很好用的還是給我一些exampel代碼?

我需要顯示秒,分鐘,小時,天。

首先,我想過做一個普通的定時器,其對所有+1秒,但我認爲它更容易,有一些適當的函數來處理這樣的「計數」 -timers,對不對?

我沒事任何提示!

謝謝:)

多數民衆贊成我想出現在:

在我的主類,我得到了一個計時器,我呼籲:

utimecounttimer(); 

我的計時器是這樣的:

public void utimecounttimer() { 

     uptimetimer.scheduleAtFixedRate(new TimerTask() { 
       @Override 
       public void run() { 
        if (isstreamlive == true){ 
        UptimeCount.Uptimestart(); 
        }else{ 
         UptimeCount.Uptimestop(); 
        } 
       } 
       }, 1000, 1000); 
} 

,然後我UptimeCount類是在這裏:

public class UptimeCount { 

    public static long startTime = 0; 
    public static long OnlineTimeMillis = 0; 

    public static float OnlineTimeSec = 0; 
    public static float OnlineTimeMin = 0; 
    public static float OnlineTimeHour = 0; 
    public static float OnlineTimeDay = 0; 



    public static void Uptimestart(){ 

     if(startTime == 0){ 
     startTime = System.currentTimeMillis(); 
     }else 


     if(startTime != 0){ 
     OnlineTimeMillis = System.currentTimeMillis()-startTime; 
     OnlineTimeSec = OnlineTimeMillis /1000F; 
     OnlineTimeMin = OnlineTimeMillis /(60*1000F); 
     OnlineTimeHour = OnlineTimeMillis /(60*60*1000F); 
     OnlineTimeDay = OnlineTimeMillis /(24*60*60*1000F); 
     } 


     System.out.println("Seconds"+OnlineTimeSec); 
     System.out.println("Minutes"+OnlineTimeMin); 
     System.out.println("Hours"+OnlineTimeHour); 
     System.out.println("Days"+OnlineTimeDay); 

    } 



    public static void Uptimestop(){ 

     startTime = 0; 
     OnlineTimeMillis = 0;  
     OnlineTimeSec = 0; 
     OnlineTimeMin = 0; 
     OnlineTimeHour = 0; 
     OnlineTimeDay = 0; 
    } 


} 

然後,最後但並非最不重要的金正日在我的主類下面的行獲得的相關信息在聊天:

if (message.equalsIgnoreCase("!uptime")) { 
    sendMessage(channel," Stream is running for: "+UptimeCount.OnlineTimeDay +" Days, "+UptimeCount.OnlineTimeHour +" Hours. "+UptimeCount.OnlineTimeMin +" Minutes and " +UptimeCount.OnlineTimeSec +" Seconds."); 
} 

我沒有測試它,但是我想我必須格式化毫秒輸出的花車,然後它應該工作,對吧?

+1

如果你可以使用番石榴,你有'StopWatch' – fge

+0

爲什麼不寫你的自定義線程,不斷增加這個時間計數器,並有一個幫助方法嵌入在它告訴你計時器秒,分鐘,小時和天運行?將它設置爲守護程序線程,以便在主應用程序未運行時不運行,但僅在主應用程序運行時才運行。 –

+0

使用系統時鐘檢測已經過了多長時間。使用Joda庫來獲取適當的值來顯示。 –

回答

1

您可以使用Joda Time來表示持續時間和次數:

// at startup of the stream 
DateTime startedAt = DateTime.now(); 

// later 
Duration elapsed = new Duration(startedAt, DateTime.now()); 

而且可以使用該解決方案描述in this answer格式化你的輸出,以獲得人類可讀的輸出(即「1小時2分鐘。 「)。

請檢查Duration,因爲它有像toStandardHours,toStandardMinutes這樣的方法,可以用來顯示總小時數/分鐘數等。過去了(即「1小時| 62分鐘」)。

+0

Ty,我會嘗試這一個,因爲我上面的一個嘗試不完全一樣,因爲我需要它:) – user3220962

1
// it will give you current time in mille seconds 

long startTime = System.currentTimeMillis(); 


// Mill second diffrence 

long OnlineTimeMillis = System.currentTimeMillis()-startTime; 


// time diff in mille seconds since you are online 

float OnlineTimeSec = OnlineTimeMillis /1000F; 

// time diff in Minutes since you are online 
float OnlineTimeMin = OnlineTimeMillis /(60*1000F); 

// time diff in Hours since you are online 
float OnlineTimeHour = OnlineTimeMillis /(60*60*1000F); 

// time diff in days since you are online 
float OnlineTimeDay = OnlineTimeMillis /(24*60*60*1000F); 
+0

這看起來很有趣。謝謝!我只能將這些東西放在一個方法中,所以我只能在機器人連接到流IRC時立即調用它,並且從那裏開始計數呢? – user3220962

+0

當用戶連接到stream @ user3220962時,在方法中保留上述內容並在單獨的線程中運行? – Sumeet

+1

我想是這樣嗎?將它打包成一個靜態的void xyz(),所以我可以儘快地調用那個機器人從那時起每秒連接一次,所以浮點數得到更新或者是我對這個錯誤的想法? – user3220962