我正在制作我的第一个Android应用程序,差不多完成了。 我遇到了一个问题,谁知道,我可能会过度思考它。
无论如何,问题是:我有一个date picker
,目前允许您从月份中选择一天并编辑给定日期的一些信息。
现在我正在尝试选择月份并显示该月份的所有信息。 问题出在哪里确定一个月的日子。
我的月份从一个日历月的第一个星期日开始,到上个月最后一天的星期六结束。
前:
关于做什么,我有一些想法,但我觉得我过度复杂并且低估了java中日历的强大功能。 任何帮助或建议将不胜感激。
由于
答案 0 :(得分:0)
嗯,这可能不是你实际问题的正确答案,但也许它有所帮助。如果您有可能想考虑使用JodaTime库JodaTime 这样做有很多方便的方法。例如,只需在任何给定日期添加一个月,或获取给定月份的最大天数。
答案 1 :(得分:0)
现代方法使用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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。