为什么这个 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>
我正在通过代码设置 maxDate
和 minDate
:
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
。无需实验,略高于您的结果。
我正在开发一个名为 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
只在顶部显示月份、年份和星期几!我搜索了一下,发现了另一个类似的问题:
但答案告诉 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
。无需实验,略高于您的结果。