为什么这个 CalendarView 是空的(什么都不显示)?

Why is this CalendarView empty (showing nothing)?

我正在开发一个名为 Infinite Calendar 的应用程序。它不是无限的,因为一切都有极限,而我现在正在寻找这个极限。我正在使用 CalendarView 来显示日历,并使用 JodaTime 来帮助我处理日期。

我的布局只有一个视图:

<CalendarView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:showWeekNumber="false"
    android:shownWeekCount="5"
    android:id="@+id/calendar">
</CalendarView>

我正在通过代码设置 maxDateminDate

calendar.setMinDate (0);
calendar.setMaxDate (9223372017014400000L);

为什么我使用 9223372017014400000L?因为经过一些实验,我发现这是JodaTime可以得到的最大值。为什么我不在布局文件中设置它们?因为我不知道格式。我之前尝试过几次,但它一直抛出异常,说最大值小于最小值...

现在我想,到目前为止一切都很好。所以我尝试将日期设置为一些非常大的数字:

Date date = new LocalDate (2000000, 1, 1).toDate ();
calendar.setDate (date.getTime ());

其实我什至不知道我是做得好还是我只是在屠杀这个。

奇怪的事情发生了。当我 运行 应用程序时,CalendarView 只在顶部显示月份、年份和星期几!我搜索了一下,发现了另一个类似的问题:

但答案告诉 OP 将尺寸设置为 match_parent,我显然是这样做的。

那么问题来了,请问有什么特殊原因吗?如果是,它是什么,我该如何解决?如果不是,CalendarView的限制是多少?

更新:

我尝试将最小日期设置为默认值(未指定)并将最大日期设置为 1/1/2000000,然后将日期设置为 1/12000000。现在日历视图显示 1999999 中的日期和其他日期!多么奇怪!

Jon Skeet 请帮助我!

根据我 phone 上 Google 自己的日历应用程序判断,该应用程序只能到 2038 年,我想他们的 CalendarView 遇到了由 Year 2038 Problem。这可能是它支持的最大日期,尽管我在文档中找不到任何提及。

您最好研究其他解决方案或编写自己的解决方案,使用时间的 64 位表示法 - 这应该涵盖您大约 3000 亿年...


旁白:JodaTime 使用 64 位时间表示,因此要获得最大值,您只需将 63 个连续的 1 转换为十进制即可 9223372036854775807。无需实验,略高于您的结果。