【发布时间】: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
Java 中日历的 add 方法将整数作为输入
整数秒 = 3; cal.add(Calendar.SECOND, secs);但是如果秒是 Long 类型呢。
long secs = 3
有很多可能性,比如添加秒迭代,但其他选项是什么?
【问题讨论】:
标签: java date calendar long-integer
如果long sec 中存储的值小于或等于Integer.MAX_VALUE,则可以转换为int:
cal.add(Calendar.SECOND, (int) sec));
如果值小于或等于Long.MAX_VALUE / 1000,那么您可以将秒转换为毫秒并使用不同的方法:
cal.setTimeInMillis(cal.getTimeInMillis() + (sec*1000));
【讨论】:
如果秒的 long 值不是太大而无法放入整数,则强制转换。
long secs = 3;
cal.add(Calendar.SECOND, (int) secs);
但我强烈建议您使用 joda time 而不是 java 日历 API。
【讨论】:
例如,将秒数除以 86400 后转换为天数,然后加上天数和剩余的秒数。您需要巧妙地执行此操作,因为即使除以 86400 后,结果也可能大于 int。
另一种方法是使用 getMillisOf() 将日历转换为毫秒,添加所需的值,然后使用 setTimeInMillis() 设置它。这更简单,而且出错的风险很小,只需记住将秒转换为毫秒即可。
【讨论】:
Afaik 日历在内部将值存储为整数,因此无法将 long 放入其中。如果我错了,请纠正我,但这就是我从Java calendar 中读出的内容。您应该将您的秒数转换为天数左右以获得您想要的。
【讨论】:
如果你的号码很大, 一个想法是您在 TOW TIME add() 中执行此操作
MaxInt: 2147483647
MaxLong: 9223372036854775807
所以
cal.add(Calendar.SECOND, secs / 1000000000);
cal.add(Calendar.SECOND, secs % 1000000000);
【讨论】: