类级别变量:
static int secondsInterval = 100000000;
static long secondsSpecial=0;
static Date dateSecondsReg;
我有以下函数,我向该函数传递两个参数:
- 自特定日期以来经过的秒数。
- 自计算开始以来的实际日期(开始日期)。
方法是:
public static void secondsToNotify(long seconds, String d){
Date dt = Convert(d);
System.out.println(""+dt);
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
secondsSpecial = secondsInterval*(1+(seconds/secondsInterval));
cal.add(Calendar.SECOND, (int) secondsSpecial);
dateSecondsReg = cal.getTime();
System.out.println(""+dateSecondsReg);
System.out.println(""+secondsSpecial);
}
我将以下参数传递给该方法:
secondsToNotify(2682810000L, "1929-01-02");
令我惊讶的是,结果日期不是 future 的日期,而是过去的日期:
结果
1929-01-02
Mon Jun 17 17:08:24 IST 1878
2700000000
不明白我哪里出错了,有什么提示吗?
最佳答案
秒/秒间隔
将以整数算术进行,这意味着任何余数都会丢失。
预乘1.0将强制以 float 进行计算:
1.0 * seconds / secondsInterval
(P.S. 最终,如果 secondsSpecial
变大,您的转换 (int)secondsSpecial
会给您带来麻烦:您需要重新考虑这一点。一想法是删除所有 int
类型。然后,作为将 int
作为间隔参数的 Calendar.add
的解决方法,转换 secondsSpecial
为年和秒并依次添加间隔。)
关于java - 秒过去函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20969923/