2015-11-05 126 views
0

我正在开发一款名为无限日历的应用程序。这不是无限的,因为一切都有限制,现在我正在找到这个限制。我正在使用CalendarView来显示日历和JodaTime以帮助我处理日期。为什么这个CalendarView是空的(什么都不显示)?

我的布局,只有一个观点:

<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,然后设置日期一千二万分之一。现在日历视图在1999999显示日期和其他日期!奇怪!

Jon Skeet请帮帮我!

回答

0

根据我的手机上Google自己的日历应用程序来判断,这个应用程序只能到2038年,我想他们的CalendarView也遭受了Year 2038 Problem创建的类似问题。这可能是它支持的最大日期,尽管我在文档中找不到任何提及。

你可能会更好过寻找其他的解决方案或编写自己的,使用时64位表示 - 这应该包括你约300十亿年... ...


旁白:JodaTime使用时间的64位表示,所以你需要做的最大的就是将63个连续的1s转换成小数,这会让你获得9223372036854775807。没有实验要求,比结果略高。

+0

查看更新。我尝试了其他的东西,日历显示2000000年的日期 – Sweeper

+0

我很困惑。你有没有解决你的问题? – Michael

+0

不行,因为我还是不明白为什么年2000000可以,但是292278993不是 – Sweeper