0

私がメンバーになっているサーバーには、接続先の xml-rpc API があります。その中には、「プレーヤー」が最後に見られたときの Unix タイムスタンプを返す「player.seen」という関数があります。この数字を使用して、ユーザーが表示されてからの経過時間を表示しようとしています。何らかの理由で、適切な値を与えていません:

古いコード: http://pastebin.com/tPe6mkyJ

さまざまな方法でスクリプトを書き直そうとしましたが、それらをバックアップするのを忘れていました。この変換を達成するためのより良い方法を知っている人がいるかどうか疑問に思っています。

編集: joda-Time を使用するようにコードを編集した後、まだ正しくない値が取得されます。たとえば、プレイヤー「pomi44」は、ゲーム内の /seen コマンドによると、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」は、ゲーム内の /seen コマンドによると、15 日 9 時間 10 分間見られていません。私のプログラムは、pomi44 に対して「1 日 18 時間 18 分 10 秒」を出力します。

前もって感謝します。

4

2 に答える 2

1

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.Period時差のフィールドを取得するメソッドgetDaysgetHoursなどがあります。getMinutes

于 2013-03-12T01:15:39.527 に答える
0

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();
于 2013-03-12T02:22:01.980 に答える