2013-03-12 209 views
0

我是一个服务器,我有一个xml-rpc API连接到我。其中有一个名为“player.seen”的函数,返回上次看到“玩家”时的Unix时间戳。我试图用这个数字来显示自用户被查看以来已经过了多长时间。出于某种原因,它是不给正确的价值观:Unix时间戳的时间转换

旧代码:http://pastebin.com/tPe6mkyJ

我试图重新写剧本在许多不同的方式,却忘了备份。我想知道是否有人知道更好的方式来完成此转换。

编辑: 编辑我的代码使用joda-Time后,我仍然得到不正确的值。例如,根据游戏中/看到的命令,玩家“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”尝试不同的数字,但都给出不正确的值。例如,根据游戏中/看到的命令,玩家“pomi44”在15天,9小时和10分钟内没有被看到。我的程序为pomi44输出“1天,18小时,18分钟,10秒”。

在此先感谢。

+1

乔达 - 时间的方式对工作一堆公用事业随着时间的... Offhand我想你会想要构造两个Instant,做一个[时间](http://joda-time.sourceforge.net/key_interval.html),然后将其转换为一个时期提取不同的领域(天,小时等)。但我可能是错的:) – Charlie 2013-03-12 01:20:34

回答

1

转换longint是不是一个好主意:

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等,以获得时间差的那些领域。

0

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

它应该是时间戳在那里,而不是结果,即时尝试帮助。你也在比较你的整数,这比较日期。我会喜欢注意“给出错误的价值”。在你的问题是不是很有帮助。怎么了?哪里不对? – 2013-03-12 02:29:07

+0

我试过在http://pastebin.com/tPe6mkyJ上得到Unix时间戳的区别不是问题,从时间差异转换为可读的时间长度(小时,分钟等)是。 – 2013-03-12 02:30:48