在 android 中,当运行下面的代码 fragment 时,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
虽然时间对象't'在所有条件下都有预期值,但 toMillis() 函数返回的 long 值仅为 -1。 而且,对于 2038 年 1 月 19 日之后的所有日期上限值,toMillis() 函数仅返回 -1 而不是预期值。
我不明白,也没有找到任何合适的原因或解决方案。 请让我知道,如果我做错了什么或者有任何其他方法可以找到此日期之后的毫秒值。
最佳答案
这就是影响类 android.text.format.Time
(android class) 的 year-2038-problem。该问题在 UNIX 中很典型。该类的文档说:
“它以 struct tm 为模型,事实上,使用 struct tm 来实现大部分功能。”
所以它在后台使用了一个C++-solution这在 UNIX 系统上也很普遍。这种数据类型只有 32 位,所以在 2038 年会发生整数溢出。最后,您可以期待 future 的错误修复,请参阅以下 Android 错误报告:
Issue 37653 : android.text.format.Time 不是 2038 年安全
关于java - 为什么 toMillis() 函数在 Java 中返回 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22730915/