0

我所属的服务器有一个我要连接的 xml-rpc API。其中有一个名为“player.seen”的函数,它返回最后一次看到“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 秒”。

提前致谢。

4

2 回答 2

1

转换longint不是一个好主意:

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,getHoursgetMinutes来获取时差的那些字段。

于 2013-03-12T01:15:39.527 回答
0

使用不使用 Jodatime 的日期,我认为 joda time 是要走的路(它只是更好)但是这应该不需要 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();
于 2013-03-12T02:22:01.980 回答