我所属的服务器有一个我要连接的xml-rpc API。在其中有一个名为“player.seen”的函数,它返回上次看到“播放器”时的Unix时间戳。我正在尝试使用此数字来显示自用户被查看以来已经过了多长时间。出于某种原因,它没有给出正确的值:
旧代码:http://pastebin.com/tPe6mkyJ
我尝试过以不同的方式重写脚本,但忘了支持它们。我想知道你们中是否有人知道更好的方法来实现这种转换。
编辑: 在编辑我的代码以使用joda-Time之后,我仍然得到不正确的值。例如,根据游戏中/看到的命令,在15天,9小时,10分钟内没有看到玩家“pomi44”。我的节目输出“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”,但都给出了不正确的值。例如,根据游戏中/看到的命令,玩家“pomi44”在15天,9小时和10分钟内没有被看到。我的程序为pomi44输出“1天,18小时,18分钟,10秒”。
提前致谢。
答案 0 :(得分:1)
将long
转换为int
不是一个好主意:
int TimeStamp_now = (int) curDate.getTime();
根据上述声明,您可能会丢失一些信息。
我建议您使用Joda Time Library。它有periods的概念。
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
等,以获取时差的字段。
答案 1 :(得分:0)
使用不使用Jodatime的日期,我认为joda时间是可行的方式(它只是更好)然而这应该做到而不需要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();