java - 获取月份的第一个星期一和最后一个星期日,跨越月份边界

标签 java date

我想获取与当月重叠的周中的第一个星期一和最后一个星期日,即使星期一或星期日不是当月的。

比如本月2017-04(4月),第一个星期一是3月27日,最后一个星期日是4月30日。

最佳答案

TemporalAdjuster接口(interface)提供类来操作日期时间值。 TemporalAdjusters类提供了几个方便的实现。

策略是先确定当前日期。这需要一个时区。对于任何给定时刻,日期在全局范围内因地区而异。

从今天开始,获取当前月份的第一天和最后一天。我们从每个人那里询问我们想要的星期几的上一次或下一次出现。我们还接受一个月的第一天或最后一天实际上可能是所需的星期几,这就是下面看到的 TemporalAdjusters 调用中“orSame”的含义。

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

LocalDate firstOfMonth = today.with( TemporalAdjusters.firstDayOfMonth() );
LocalDate monday = firstOfMonth.with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY ) );

LocalDate endOfMonth = today.with( TemporalAdjusters.lastDayOfMonth() );
LocalDate sunday = endOfMonth.with( TemporalAdjusters.nextOrSame( DayOfWeek.SUNDAY ) );

顺便说一下,如果你需要代表整个月,看看YearMonth类。

关于java - 获取月份的第一个星期一和最后一个星期日,跨越月份边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43238152/

相关文章:

Bash,如何使用不同的语言环境打印日期

java - nxn 棋盘上 n 个玩家的 Tic tac Toe - 检查获胜者

javascript - 在 Jest 测试中设置时刻时区

java - 公历 : Getting a user's (day_of_the_week) from their own birthday input

java - 在 JPA 中,如何知道持久性异常是否是由特定数据库触发器引起的?

java - 将字符串转换为 Java.sql.Date

mysql - 如何获取数据库中最近一个月的数据?

swift - 在 Swift 3.0 中处理日期格式

java - 如何为 Java 11 编译和运行我的 Maven 单元测试,同时为旧版本的 Java 8 编译我的代码

java - 较新版本的 Hibernate 中的 Criterion#ignoreCase