Java长返回奇怪值

Java长返回奇怪值,java,long-integer,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

关于以下方法:

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,这是为什么?

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

如果3600是您要传递的值,那么显然会得到一个负值

打印出
System.currentTimeMillis()
,您将看到它是一个相当大的值

currentTimeMillis()
如下所示:


归结为一句话,你有

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

如果
System.currentTimeMillis()
是unix时间(现在是1343874904292),那么这当然是负数。我不确定你想写什么,但这显然不是它…

你的问题是你在用毫秒减去秒

试试这个:

long elapsedMillis = now - (seconds * 1000); // convert seconds to millseconds
看来你真的只是想这么做:

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

打印出你的变量,似乎你的elapsedMillis比秒大得多*1000也有可能他有溢出。@锑是的,但他不知道输入的值是什么,很难判断。除非你将传递的值显示为
。是的,它们很大,我该怎么做才能得到一个合理的值呢?我试图通过当前的时间状态来得到一个小时的时间差。每次我调用“getCountdownLeft()”方法时,它都会给出当时一个小时的时间差。
private long getCountdownLeft(Integer seconds) {
    return seconds * 1000;
}