【发布时间】:2014-02-26 09:00:07
【问题描述】:
我正在开发一个 IRC Twitch.tv BOT (PircBot),我想实现一个 !uptime 聊天命令,它将显示流在线的时间。
我在谷歌上搜索了一下,我只找到了需要 GUI 的解决方案。
Some1 可以告诉我哪些库好用或给我一些示例代码吗?
我需要显示秒、分钟、小时、天。
首先我考虑做一个正常的计时器,它计数+1秒,但我认为它更容易,并且有一些适当的函数来处理这样的“计数”-计时器,对吧?
任何提示都可以!
谢谢:)
这就是我现在想出的:
在我的主课中,我有一个计时器,我用它来调用:
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;
}
}
然后,最后但并非最不重要的一点是,我在 Main 类中使用以下行在聊天中获取信息:
if (message.equalsIgnoreCase("!uptime")) {
sendMessage(channel," Stream is running for: "+UptimeCount.OnlineTimeDay +" Days, "+UptimeCount.OnlineTimeHour +" Hours. "+UptimeCount.OnlineTimeMin +" Minutes and " +UptimeCount.OnlineTimeSec +" Seconds.");
}
我还没有测试它,但我认为我必须格式化浮点数的 ms 输出,然后它应该可以工作,对吧?
【问题讨论】:
-
如果你会使用 Guava,你有
StopWatch -
为什么不编写你的自定义线程来不断增加这个时间计数器,并在其中嵌入一个帮助方法,告诉你计时器运行的秒数、分钟数、小时数和天数?将其设置为守护线程,以便在您的主应用程序未运行时它不运行,而仅在主应用程序运行时运行。
-
使用系统时钟来检测已经过去了多少时间。使用 Joda 库获取要显示的正确值。
-
我去看看 fge,谢谢。 @Awesome 所以你说我应该按照自己的想法去做一个简单的 +1 计时器?如果是的话,我不明白你所说的“帮助方法”是什么意思或将它作为一个守护线程运行。我对 java 还是很陌生 =P
-
@ted 那行不通。 Bot 一直在线/运行,但它会在在线时自动连接到 Stream,并且它应该在那里开始计数,所以我不确定我是否可以告诉程序从那时起获取系统时间?