怎么了?我假设,如果我从1980年1月1日0:0:0减去1毫秒,那么我得到1979。但是我必须为此减去500+毫秒。请给我一个提示。

val cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
cal.set(1980, 0, 1, 0, 0, 0)
val date = new Date
date.setTime(cal.getTimeInMillis()) // <- 1980 Jan 01 0:0:0
date.setTime(cal.getTimeInMillis() - 1) // <- 1980 Jan 01 0:0:0 too !!!

更新。

解决方法是
val cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
cal.setTimeInMillis(0)
cal.set(1980, 0, 1, 0, 0, 0)

最佳答案

使用Calendar.set(year, month, day, hourOfDay, minute, second)时,不会设置毫秒。因此,Calendar实现将毫秒设置为“未知”,这实际上被视为给定秒数内的中点。

减去500毫秒意味着您只需跨过中点。如果您增加500ms,也会发生同样的情况,这会使您略胜一秒。实际上减去500毫秒是可行的,您必须加620毫秒才能看到下一秒。

关于java - 减去1ms会导致意外行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18946386/

10-09 21:46