为什么toMillis()函数在java中返回-1


android中,在运行下面的代码片段时,date3返回-1

booking_year2 = 2038;
booking_month2 = 1;
booking_day2 = 17;
Time t = new Time();
t.set(booking_day2, booking_month2 - 1, booking_year2);
long date3 = t.toMillis(false);
//date3 returns 2147451300000 as expected

//But if we run with values:
booking_year2 = 2038;
booking_month2 = 1;
booking_day2 = 18;
//date3 returns -1

虽然Time对象’t’在所有条件下都具有期望值,但toMillis()函数返回的long值仅为-1.
而且,对于2038年1月19日之后的所有日期值,toMillis()函数仅返回-1而不是预期值.

我没有理解,也没有找到任何合适的理由或解决方案.
如果我做错了或者在此日期之后还有其他方法可以找到毫秒值,请告诉我.

最佳答案 这是影响类android.text.format.Time(
android class)的2038年问题.这个问题是UNIX的典型问题.该课程的文档说:

“它是在struct tm之后建模的,事实上,它使用struct tm来实现大部分功能.”

因此它在后台使用了C++-solution,这在UNIX系统上也很普遍.此数据类型只有32位,因此在2038年将发生整数溢出.最后,您可以希望未来的bug修复,请参阅以下Android的错误报告:

Issue 37653:android.text.format.Time不是2038年的安全

点赞