我是其中一个成员的服务器有一个我正在连接的xml-rpc API。其中有一个名为"player"的函数。返回"播放器"最后一次被看到的Unix时间戳。我试图使用这个数字来显示自从用户被看到以来已经有多长时间了。由于某些原因,它没有给出正确的值:
旧代码:http://pastebin.com/tPe6mkyJ
我试过用很多不同的方法重写剧本,但是忘记备份了。我想知道你们中是否有人知道更好的方法来完成这种转换。
编辑:在编辑代码以使用joda-Time之后,我仍然得到不正确的值。例如,根据游戏中的/seen命令,玩家"pomi44"在15天9小时10分钟内没有被看到。我的程序输出"1天18小时18分10秒"
新代码: Object[] params1 = new Object[]{API_KEY, playerName};
String result = (String) client.execute("player.seen", params1);
int timeStamp = Integer.parseInt(result);
Date curDate = new Date();
DateTime start = new DateTime(timeStamp * 1000L);
DateTime end = new DateTime(curDate.getTime());
Period period = new Period(start, end);
int seconds = period.getSeconds();
int minutes = period.getMinutes();
int hours = period.getHours();
int days = period.getDays();
System.out.println(days + " days, " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds.");
我尝试了不同的数字来代替"1000",但都给出了不正确的值。例如,根据游戏中的/seen命令,玩家"pomi44"已经15天9小时10分钟没被看到了。我的程序为pomi44输出"1天,18小时,18分钟,10秒"。
将long
转换为int
不是一个好主意:
int TimeStamp_now = (int) curDate.getTime();
上面的语句可能会丢失一些信息。
我建议你使用Joda Time Library。它有周期的概念。
DateTime start = new DateTime(timeStamp * 1000L);
DateTime end = new DateTime(curDate.getTime());
Period period = new Period(start, end);
org.joda.time.Period
有getDays
、getHours
、getMinutes
等方法来获取这些时差字段
使用date而不是使用Jodatime,我认为jodatime是一种方法(它只是更好),但是这应该不需要Jodatime
String result = (String) client.execute("player.seen", params1);
int timeStamp = Integer.parseInt(result);
Date then=new Date(timeStamp*1000L);
Date now = new Date();
long difference = now.getTime() - then.getTime();