2013-03-12 2 views
0

내가 속한 서버에 연결할 xml-rpc API가 있습니다. 거기에는 "player.seen"이라는 함수가 있는데 "player"가 마지막으로 보았을 때의 유닉스 타임 스탬프를 반환합니다. 이 숫자를 사용하여 사용자가 본 후 얼마나 오랫동안 표시했는지 표시하려고합니다. 어떤 이유로 들어, 적절한 값을 제공하지 않습니다 :Unix 타임 스탬프에서 시간 변환

오래된 코드 : 나는 여러 가지 방법으로 스크립트를 재 작성했지만,이를 백업 잊은 http://pastebin.com/tPe6mkyJ

합니다. 당신이이 변환을 수행하는 더 좋은 방법을 안다면 궁금합니다.

EDIT : joda-Time을 사용하여 코드를 편집 한 후에도 여전히 잘못된 값이 표시됩니다. 예를 들어, 플레이어 "pomi44"는 게임 내/본 명령에 따라 15 일, 9 시간 10 분 동안 보이지 않았습니다. 내 프로그램에서 "1 일, 18 시간, 18 분, 10 초"를 출력합니다.

새로운 코드 : 나는 "1000"대신 다른 숫자를 시도

  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."); 

하지만, 모두가 잘못된 값을 제공합니다. 예를 들어, 플레이어 "pomi44"는 게임 내/본 명령에 따라 15 일, 9 시간 및 10 분 동안 보이지 않았습니다. 내 프로그램은 pomi44에 대해 "1 일, 18 시간, 18 분, 10 초"를 출력합니다.

미리 감사드립니다. 당신은 몇 가지 정보가 손실 될 수있는 위의 문으로

int TimeStamp_now = (int) curDate.getTime(); 

:

+1

Joda 타임 jodatime 필요없이 그것을해야 갈 수있는 방법입니다 작업을위한 유틸리티 무리가 있다고 생각 시간과 함께 ... 오히려 나는 당신이 두 Instants를 만들고, [Interval] (http://joda-time.sourceforge.net/key_interval.html)을 만든 다음,이를 기간으로 변환하여 추출하고 싶다고 생각합니다. 다른 필드 (일, 시간 등). 그러나 나는 틀릴 수있다 :) – Charlie

답변

1

intlong를 변환하는 것은 좋은 생각이 아니다.

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는 시차 해당 필드를 얻는 방법 getDays, getHours, getMinutes 등이있다. Jodatime를 사용하지 않는 날짜를 사용

0

, 내가 joda 시간 (그냥 모든 라운드 좋네요) 그러나이

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

그것은 타임 스탬프가 아니고, 결과가 아니며, 도와 주려고한다. 또한 당신의 정수를 비교하고 있습니다. 이것은 날짜를 비교합니다. 나는 또한 "잘못된 값을 주라." 귀하의 질문에 매우 도움이되지 않습니다. 얼마나 틀렸어? 뭐가 잘못 되었 니? –

+0

필자는 http://pastebin.com/tPe6mkyJ에서 Unix 타임 스탬프의 차이를 얻는 것이 문제가 아니라 타임 스탬프 차이를 시간, 분 등의 읽기 가능한 시간으로 변환하는 방법을 시도했습니다. . –

관련 문제