时间转换从Unix时间戳



我是其中一个成员的服务器有一个我正在连接的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.PeriodgetDaysgetHoursgetMinutes等方法来获取这些时差字段

使用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();

相关内容

  • 没有找到相关文章