2013-03-12 252 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