怎么了?我假设,如果我从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/