如何使今年的2038年问题junit测试按预期工作

k3b*_*k3b 0 java junit year2038

我正在编写一些代码,由于Java 溢出,因此Year_2038_problem会在2038年1月19日之后停止工作,Date所以我可以创建一个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);
}
Run Code Online (Sandbox Code Playgroud)

有什么线索为什么这不会失败?

我正在将Android-Studio-3.4.1与java-1.8.0_152(64位)结合使用,并具有'junit:junit:4.12'和'androidx.test:runner:1.1.0'

Thi*_*ilo 5

今年2038-问题,当你存储在一个符号的32位整数(将在2038溢出)具有划时代的秒数发生。

您使用的代码将毫秒数存储在一个有符号的64位整数中。这将仍然正常工作了一段时间