如何使这个 2038 年问题的 junit 测试按预期工作
How to make this Year-2038-problem junit test work as expected
我正在编写的一些代码将在 2038 年 1 月 19 日之后停止工作,因为 Year_2038_problem 当 java 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);
}
为什么这不会失败的任何线索?
我正在使用 Android-Studio-3.4.1 与 java-1.8。0_152(64 位)与 'junit:junit:4.12' 和 'androidx.test:runner:1.1.0'
当您将纪元秒数存储在带符号的 32 位整数(将在 2038 年溢出)时,会发生 Year-2038-problem。
您使用的代码将毫秒数存储在带符号的 64 位整数中。那仍然可以正常工作for a while。
我正在编写的一些代码将在 2038 年 1 月 19 日之后停止工作,因为 Year_2038_problem 当 java 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);
}
为什么这不会失败的任何线索?
我正在使用 Android-Studio-3.4.1 与 java-1.8。0_152(64 位)与 'junit:junit:4.12' 和 'androidx.test:runner:1.1.0'
当您将纪元秒数存储在带符号的 32 位整数(将在 2038 年溢出)时,会发生 Year-2038-problem。
您使用的代码将毫秒数存储在带符号的 64 位整数中。那仍然可以正常工作for a while。