-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

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

于 2012-08-02T02:11:06.180 回答
0

归结为一个陈述,你有

    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 回答