Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Unix时间戳的时间转换_Java_Date_Datetime_Xml Rpc - Fatal编程技术网

Java Unix时间戳的时间转换

Java Unix时间戳的时间转换,java,date,datetime,xml-rpc,Java,Date,Datetime,Xml Rpc,我所属的服务器具有我正在连接的xml rpc API。其中有一个名为“player.seen”的函数,它返回上次看到“player”的Unix时间戳。我试图用这个数字来显示这个用户已经被看到多久了。由于某些原因,它没有给出正确的值: 旧代码: 我尝试过用许多不同的方式重新编写脚本,但忘记了备份它们。我想知道你们中是否有人知道一个更好的方法来完成这个转换 编辑: 在编辑代码以使用joda Time之后,我仍然得到不正确的值。例如,根据in-game/seen命令,玩家“pomi44”已经有15天9

我所属的服务器具有我正在连接的xml rpc API。其中有一个名为“player.seen”的函数,它返回上次看到“player”的Unix时间戳。我试图用这个数字来显示这个用户已经被看到多久了。由于某些原因,它没有给出正确的值:

旧代码:

我尝试过用许多不同的方式重新编写脚本,但忘记了备份它们。我想知道你们中是否有人知道一个更好的方法来完成这个转换

编辑: 在编辑代码以使用joda Time之后,我仍然得到不正确的值。例如,根据in-game/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”,但都给出了错误的值。例如,根据in-game/seen命令,玩家“pomi44”已经15天9小时10分钟没有露面了。我的程序为pomi44输出“1天18小时18分钟10秒”


提前感谢。

long
转换为
int
不是一个好主意:

int TimeStamp_now = (int) curDate.getTime();
有了上述声明,您可能会丢失一些信息

我建议你使用。它的概念是


org.joda.time.Period
有方法
getDays
getHours
getMinutes
等来获取时差字段。

使用日期而不使用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();

Joda Time有一系列与时间共事的实用程序。。。我认为您需要构造两个实例,对它们进行比较,然后将其转换为一个句点,以提取不同的字段(天、小时等)。但我可能错了:)应该是那个里的时间戳,而不是结果,我想帮你们。另外,您正在比较您的中的整数,这将比较日期。我还想指出的是,在你的问题中“给出错误的值”并没有多大帮助。错在哪里?怎么了?我在中试过,获取Unix时间戳的差异不是问题,将时间戳差异转换为可读的时间长度(以小时、分钟等为单位)才是问题所在。
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();