Java长期回归奇怪的价值

时间:2012-08-02 02:02:46

标签: java long-integer

关于以下方法:

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 个答案:

答案 0 :(得分:1)

如果3600是你传入的值,你显然会得到负值。

打印System.currentTimeMillis(),你会发现它的价值非常大。

currentTimeMillis() defined为:

the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC.

答案 1 :(得分:0)

根据给出的信息很难判断,但要使用此方法,必须使用seconds初始化System.currentTimeMillis() / 1000

答案 2 :(得分:0)

归结为一个声明,你有

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

如果System.currentTimeMillis()是unix时间(现在是1343874904292),那么在课程中这将是否定的。我不确定你的意思是什么,但这显然不是......

答案 3 :(得分:0)

您的问题是从毫秒中减去

试试这个:

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

看来你真的只是想这样做:

private long getCountdownLeft(Integer seconds) {
    return seconds * 1000;
}