【问题标题】:How to add long value to calendar?如何为日历添加长值?
【发布时间】:2010-08-10 07:03:58
【问题描述】:

Java 中日历的 add 方法将整数作为输入

整数秒 = 3; cal.add(Calendar.SECOND, secs);

但是如果秒是 Long 类型呢。

long secs = 3

有很多可能性,比如添加秒迭代,但其他选项是什么?

【问题讨论】:

  • 哇,10 分钟后,砰,4 个答案。谢谢!

标签: java date calendar long-integer


【解决方案1】:

如果long sec 中存储的值小于或等于Integer.MAX_VALUE,则可以转换为int

cal.add(Calendar.SECOND, (int) sec));

如果值小于或等于Long.MAX_VALUE / 1000,那么您可以将秒转换为毫秒并使用不同的方法:

cal.setTimeInMillis(cal.getTimeInMillis() + (sec*1000));

【讨论】:

  • 我将允许的最大日期设置为“Long.MAX_VALUE / 1000”,这已经足够了,并且使用了 cal.setTimeInMillis(cal.getTimeInMillis() + (sec*1000));
【解决方案2】:

如果秒的 long 值不是太大而无法放入整数,则强制转换

long secs = 3;
cal.add(Calendar.SECOND, (int) secs);

但我强烈建议您使用 joda time 而不是 java 日历 API。

【讨论】:

    【解决方案3】:

    例如,将秒数除以 86400 后转换为天数,然后加上天数和剩余的秒数。您需要巧妙地执行此操作,因为即使除以 86400 后,结果也可能大于 int。

    另一种方法是使用 getMillisOf() 将日历转换为毫秒,添加所需的值,然后使用 setTimeInMillis() 设置它。这更简单,而且出错的风险很小,只需记住将秒转换为毫秒即可。

    【讨论】:

      【解决方案4】:

      Afaik 日历在内部将值存储为整数,因此无法将 long 放入其中。如果我错了,请纠正我,但这就是我从Java calendar 中读出的内容。您应该将您的秒数转换为天数左右以获得您想要的。

      【讨论】:

        【解决方案5】:

        如果你的号码很大, 一个想法是您在 TOW TIME add() 中执行此操作

        MaxInt:  2147483647
        MaxLong: 9223372036854775807
        

        所以

        cal.add(Calendar.SECOND, secs / 1000000000);
        cal.add(Calendar.SECOND, secs % 1000000000);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-06
          • 1970-01-01
          • 2012-01-02
          • 1970-01-01
          • 1970-01-01
          • 2020-02-10
          • 2016-10-27
          • 2022-01-20
          相关资源
          最近更新 更多