范围超出月份的Java日历

时间:2014-03-07 22:24:54

标签: java android calendar datepicker

我正在制作我的第一个Android应用程序,差不多完成了。 我遇到了一个问题,谁知道,我可能会过度思考它。

无论如何,问题是:我有一个date picker,目前允许您从月份中选择一天并编辑给定日期的一些信息。

现在我正在尝试选择月份并显示该月份的所有信息。 问题出在哪里确定一个月的日子

我的月份从一个日历月的第一个星期日开始,到上个月最后一天的星期六结束。

前:

  • 该月的第一天是星期六,因此我需要的月份的第一天是第二天。
  • 这个月的最后一天是星期五,所以我这个月的最后一天是星期六,也就是下一个月的第一天。

关于做什么,我有一些想法,但我觉得我过度复杂并且低估了java中日历的强大功能。 任何帮助或建议将不胜感激。

由于

2 个答案:

答案 0 :(得分:0)

嗯,这可能不是你实际问题的正确答案,但也许它有所帮助。如果您有可能想考虑使用JodaTime库JodaTime 这样做有很多方便的方法。例如,只需在任何给定日期添加一个月,或获取给定月份的最大天数。

答案 1 :(得分:0)

使用java.time

现代方法使用java.time类。

  

给定日期

LocalDate类表示没有时间且没有时区的仅限日期的值。

LocalDate ld = LocalDate.of( 2016 , Month.JANUARY , 23 );
  

日历月的第一个星期日

TemporalAdjuster接口提供了操作日期时间值的类。但要了解java.time使用immutable objects。我们不是改变对象的字段(“变异”),而是使用基于原始对象的值来实例化一个新对象。

TemporalAdjusters类(注意复数s)提供了TemporalAdjuster的便捷实现。这些包括获得一个月的第一天,最后一天或第n天。我们想要一个月的第一个星期日,所以我们指定预定义的枚举对象DayOfWeek.SUNDAY

LocalDate firstSundayOfMonth = ld.with( TemporalAdjusters.firstInMonth( DayOfWeek.SUNDAY ) );
  

在上个月的最后一天之后的星期六结束

我们还有另一个TemporalAdjuster来获取该月的最后一天。

LocalDate lastLocalDateOfMonth = ld.with( TemporalAdjusters.lastDayOfMonth() ) ;

另一位调整员可以获得相同或下一周的日期。

LocalDate nextOrSameSaturdayOfEndOfMonth = 
    lastLocalDateOfMonth .with( nextOrSame( DayOfWeek.SATURDAY ) ) ;

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore