为什么这个CalendarView是空的(什么也没有显示)?

时间:2015-11-05 11:17:48

标签: java android datetime calendar jodatime

我正在开发一款名为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只显示顶部的月份,年份和星期几!我搜索并发现了另一个类似的问题:

Android CalendarView not displaying the days

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

所以问题,是否有特殊原因?如果是,它是什么,我该如何解决?如果不是,CalendarView的限制是多少?

更新

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

Jon Skeet请帮助我!

1 个答案:

答案 0 :(得分:0)

根据我手机上的谷歌自己的日历应用来判断,直到2038年,我想他们的CalendarView会遇到由Year 2038 Problem创建的类似问题。这可能是它支持的最长日期,但我在文档中找不到任何提及。

你可能最好不要使用当时的64位表示来研究其他解决方案或编写自己的解决方案 - 这应该会覆盖你大约3000亿年......

抛开:JodaTime使用64位的时间表示,所以你需要做的就是获得最大值,将63连续的1转换为十进制,这样就可以得到9223372036854775807。无需实验,但略高于您的结果。