我正在编写一些代码,这些代码由于Java Date
溢出Year_2038_problem会在2038年1月19日之后停止工作,所以我可以创建一个junit测试,该测试在2036年开始失败,给我2多年的时间来解决它。
要创建一个失败的测试,我又增加了25年的时间,并且对测试没有失败感到惊讶。
@Test
public void warn2038Overflow() {
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, 25);
// today is 2019 plus 25 years becomes 2044 which should overflow
assertEquals("No calendar overflow", true,
c.getTimeInMillis() > 0l);
}
任何线索为什么这样做不会失败?
我正在将Android-Studio-3.4.1与java-1.8.0_152(64位)一起使用,并带有“ junit:junit:4.12”和“ androidx.test:runner:1.1.0”
答案 0 :(得分:5)
当您将纪元秒数存储在有符号的32位整数(将在2038年溢出)中时,就会发生Year-2038-problem。
您使用的代码将毫秒数存储在一个有符号的64位整数中。 for a while仍然可以正常工作。