java - 秒过去函数的奇怪行为

标签 java date calendar

类级别变量:

    static int secondsInterval = 100000000;
    static long secondsSpecial=0;
    static Date dateSecondsReg; 

我有以下函数,我向该函数传递两个参数:

  1. 自特定日期以来经过的秒数。
  2. 自计算开始以来的实际日期(开始日期)。

方法是:

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/

相关文章:

java - 1582年10月15日之前的日历到日期的转换。公历到儒略历的切换

date - 在 jpa 条件查询中选择特定的日期格式

PHP:日期大于当前日期

ios - 有没有办法在 google 日历和 ios 日历中使用 URL 字段

java - 在我的网络应用程序中设置时区

java - 自定义 JTabbedPane 中的选项卡渲染顺序

java - AS400系统与JNDI的连接

java - Android - 每次更改变量值时更新通知

java - 混淆日期模式字符串

swift - 快速获取日期名称和日期在日期范围内重复的次数