Java日历,范围在月之外

Java日历,范围在月之外,java,android,calendar,datepicker,Java,Android,Calendar,Datepicker,我目前正在为android开发我的第一个应用程序,一个即将完成的应用程序。 我遇到了一点问题,谁知道呢,我可能想得太多了 不管怎么说,问题在于:我有一个日期选择器,它当前允许您从月份中选择一天,并编辑给定日期的一些信息 现在我正在尝试选择月份并显示该月份的所有信息。 问题在于确定一个月的天数 我的月份从一个日历月的第一个星期日开始,到最后一个月最后一天的下一个星期六结束 例: 一个月的第一天是星期六,因此我需要的一个月的第一天是第二天 一个月的最后一天是星期五,所以我这个月的最后一天是下个月的

我目前正在为android开发我的第一个应用程序,一个即将完成的应用程序。 我遇到了一点问题,谁知道呢,我可能想得太多了

不管怎么说,问题在于:我有一个日期选择器,它当前允许您从月份中选择一天,并编辑给定日期的一些信息

现在我正在尝试选择月份并显示该月份的所有信息。 问题在于确定一个月的天数

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

例:

  • 一个月的第一天是星期六,因此我需要的一个月的第一天是第二天
  • 一个月的最后一天是星期五,所以我这个月的最后一天是下个月的第一个星期六
关于如何做,我有一些想法,但我觉得我过于复杂,低估了java中日历的威力。 任何帮助或建议都将不胜感激


谢谢

好吧,这可能不是对您实际问题的正确答案,但可能会有所帮助。如果你有可能想考虑使用JoDaTiMe图书馆 威奇有很多更方便的方法来做这些事情。例如,只需将一个月添加到任何给定日期,或获取给定月份的最大天数。

使用java.time 现代方法使用java.time类

指定日期

该类表示一个仅限日期的值,不包含一天中的时间和时区

LocalDate ld = LocalDate.of( 2016 , Month.JANUARY , 23 );
一个日历月的第一个星期日

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

该类(注意复数
s
)提供了
临时调整器的简便实现。这些包括获取一个月中一周的第一天、最后一天或第n天。我们想要一个月的第一个星期日,所以我们指定预定义的枚举对象

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

我们还有另一个
临时调整器
来获取月的最后一天

LocalDate lastLocalDateOfMonth = ld.with( TemporalAdjusters.lastDayOfMonth() ) ;
和另一个理算师在一周中的同一天或第二天获得

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

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • 后来
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。你可以在这里找到一些有用的类,比如、、和。

低估了java中日历的威力,哈哈哈。它们有那么糟糕吗?到目前为止,他们已经完成了我所需要的一切,尽管是以一种非常全面的方式……问题更多的是知道如何获得给定日期的一周中的某一天吗?如果是这样,请查看这篇维基百科文章,它有几个算法可以用来确定这一点。如果只是一个如何显示对话框供用户选择日期的问题,也许您可以查看这样一个库,而不是实现您自己的库:我想完成的是确定这一天是否是一个月的第一个星期日&最后一个星期六。我看过的所有节目都是在一个日历月内播出的,但从来没有以我正在尝试的方式播出。我会看看这个链接@user3394582是的,java.util.Date和.Calendar真的那么糟糕。它们非常糟糕,以至于Java8有一个新的内置
Java.time
包(受Joda time的启发)来取代那些旧类。所以,直接转到。在StackOverflow中搜索许多示例。你的问题已经被明确回答了多次。看看类及其
plusDays
getDayOfWeek
方法。
LocalDate nextOrSameSaturdayOfEndOfMonth = 
    lastLocalDateOfMonth .with( nextOrSame( DayOfWeek.SATURDAY ) ) ;