【发布时间】:2019-08-26 22:20:34
【问题描述】:
我有一个月的日期和时间,例如31/01/2020 at 14:00:00,这是一月的最后一个星期五。如何获取 2 月、3 月等的最后一个星期五的日期?它应该是动态的,因为可以输入任何日期,例如任何月份的第二个星期二等等。
我正在尝试以下方法,但没有成功:
LocalDateTime startTime = LocalDateTime.of(2020, 1, 31, 14, 0, 0);
final Calendar calendar = Calendar.getInstance();
calendar.set(startTime.getYear(), startTime.getMonthValue() - 1, startTime.getDayOfMonth(), startTime.getHour(), startTime.getMinute(), startTime.getSecond());
int ordinal = calendar.get(Calendar.WEEK_OF_MONTH);
startTime = startTime.plusMonths(1).with(TemporalAdjusters.dayOfWeekInMonth(ordinal, startTime.getDayOfWeek();
System.out.println(startTime);
它正在打印06/03/2020 (six of march) at 14:00:00,这是错误的,应该是28/02/2020
我错过了什么?
谢谢!
【问题讨论】:
-
添加一个月,然后调整日期以获得该月的最后一个星期五:docs.oracle.com/javase/8/docs/api/java/time/temporal/…。停止使用旧的、丑陋的 Calendar 类。
-
@JBNizet 它可以是一个月中的任何一天,而不仅仅是上周五。可以是第一个星期一、第三个星期六等
-
这个要求是不现实的。假设我是本月的第四个星期一。这也是那个月的最后一个星期一。现在假设我想要下个月的下一个“相似的日子”。我应该选择第四个星期一还是最后一个星期一?如果这个月恰好有 5 个星期一,那就不是同一天。
-
如果你知道你想要的是最后一个星期一,那么使用一个可以为你提供最后一个星期一的调节器。如果您知道您想要第 4 个星期一,那么请使用可以为您提供第 4 个星期一的调节器。那将是两个不同的调节器。
-
您的问题不清楚,可能需要重写。特别是,“last Friday”与序数“4th Friday”或“5th Friday”不是一回事。
标签: java spring-boot date datetime