从Unix时间戳转换时间

时间:2013-03-12 01:13:00

标签: java date datetime xml-rpc

我所属的服务器有一个我要连接的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秒”。

提前致谢。

2 个答案:

答案 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包含方法getDaysgetHoursgetMinutes等,以获取时差的字段。

答案 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();