instant.truncatedTo(ChronoUnit.HOURS) returns 值大于原始值
instant.truncatedTo(ChronoUnit.HOURS) returns value that is greater than original for
根据Instant.truncatedTo
的javadoc,它的作用是
Truncating the instant returns a copy of the original with fields
smaller than the specified unit set to zero.
因此,如果我用 ChronoUnit.HOURS
调用它,我希望小时不会被修改。当我用 1970 年之后的日期调用它时,这也是我所看到的。但是,在此之前它实际上返回的值大于原始值。这是预期的行为还是我遗漏了什么?
Instant.ofEpochMilli(-1); //1969-12-31T23:59:59.999Z
Instant.ofEpochMilli(-1).truncatedTo(ChronoUnit.HOURS); //1970-01-01T00:00:00Z
Instant.ofEpochMilli(1); //1970-01-01T00:00:00.001Z
Instant.ofEpochMilli(1).truncatedTo(ChronoUnit.HOURS); //1970-01-01T00:00:00Z
Instant.ofEpochMilli(2*60*60*1000).truncatedTo(ChronoUnit.HOURS); //1970-01-01T02:00:00Z
Instant.ofEpochMilli(2*60*60*1000-1); //1970-01-01T01:59:59.999Z
Instant.ofEpochMilli(2*60*60*1000-1).truncatedTo(ChronoUnit.HOURS);//1970-01-01T01:00:00Z
Is this the intended behavior
不,a bug 已在 Java 9.
中修复
根据Instant.truncatedTo
的javadoc,它的作用是
Truncating the instant returns a copy of the original with fields smaller than the specified unit set to zero.
因此,如果我用 ChronoUnit.HOURS
调用它,我希望小时不会被修改。当我用 1970 年之后的日期调用它时,这也是我所看到的。但是,在此之前它实际上返回的值大于原始值。这是预期的行为还是我遗漏了什么?
Instant.ofEpochMilli(-1); //1969-12-31T23:59:59.999Z
Instant.ofEpochMilli(-1).truncatedTo(ChronoUnit.HOURS); //1970-01-01T00:00:00Z
Instant.ofEpochMilli(1); //1970-01-01T00:00:00.001Z
Instant.ofEpochMilli(1).truncatedTo(ChronoUnit.HOURS); //1970-01-01T00:00:00Z
Instant.ofEpochMilli(2*60*60*1000).truncatedTo(ChronoUnit.HOURS); //1970-01-01T02:00:00Z
Instant.ofEpochMilli(2*60*60*1000-1); //1970-01-01T01:59:59.999Z
Instant.ofEpochMilli(2*60*60*1000-1).truncatedTo(ChronoUnit.HOURS);//1970-01-01T01:00:00Z
Is this the intended behavior
不,a bug 已在 Java 9.
中修复