-1

次の方法について:

private long getCountdownLeft(Integer seconds) {
        long now = System.currentTimeMillis();
        long elapsedMillis = now - seconds;
        long millisLeft = seconds * 1000 - elapsedMillis;
        return millisLeft/1000;
}   

public static void Main(String[] args) {
      getApi().getLogger.debug("TimeLeft " + getCountDownLeft(3600)); //base time
}

-12039495960 のような値を返しています。なぜですか?

4

4 に答える 4

1

渡す値が 3600 の場合、明らかに負の値になります。

を印刷するSystem.currentTimeMillis()と、かなり大きな値であることがわかります。

currentTimeMillis()は次のように定義されます。

the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC.
于 2012-08-02T02:11:58.910 に答える
0

1 つのステートメントに要約すると、次のようになります。

    return (seconds * 999 - System.currentTimeMillis())/1000;

System.currentTimeMillis()Unix 時間 (現在は 1343874904292) の場合、もちろん、これは負になります。何を書こうとしていたのかわからないが、これは明らかにそうではない...

于 2012-08-02T02:37:07.100 に答える
0

あなたの問題は、ミリから秒を引いていることです。

これを試して:

long elapsedMillis = now - (seconds * 1000); // convert seconds to millseconds

あなたは本当にこれをやろうとしているようです:

private long getCountdownLeft(Integer seconds) {
    return seconds * 1000;
}
于 2012-08-02T02:37:29.617 に答える
0

与えられた情報に基づいて判断するのは非常に困難ですが、このメソッドが機能するには、secondsで初期化する必要がありますSystem.currentTimeMillis() / 1000

于 2012-08-02T02:11:06.180 に答える