我正在开发一款名为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>
我正在按代码设置maxDate
和minDate
:
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请帮助我!
答案 0 :(得分:0)
根据我手机上的谷歌自己的日历应用来判断,直到2038年,我想他们的CalendarView
会遇到由Year 2038 Problem创建的类似问题。这可能是它支持的最长日期,但我在文档中找不到任何提及。
你可能最好不要使用当时的64位表示来研究其他解决方案或编写自己的解决方案 - 这应该会覆盖你大约3000亿年......
抛开:JodaTime使用64位的时间表示,所以你需要做的就是获得最大值,将63连续的1转换为十进制,这样就可以得到9223372036854775807
。无需实验,但略高于您的结果。