当前位置: 首页 > 知识库问答 >
问题:

如何在给定的本地日期后获得下周五13号

湛鸿雪
2023-03-14

我需要使用LocalDate获得给定日期后的下周五13号。

如何实施?

共有3个答案

宋勇
2023-03-14

您可以使用IntStream迭代几天:

public static LocalDate findFridayThirteen(LocalDate fromDate) {
    return IntStream.iterate(0, i -> i + 1)
            .mapToObj(fromDate::plusDays)
            .filter(date -> date.getDayOfWeek() == DayOfWeek.FRIDAY 
                    && date.getDayOfMonth() == 13)
            .findFirst()
            .orElseThrow();
}

或者,您只能在周五重复:

public static LocalDate findFridayThirteen2(LocalDate fromDate) {
    LocalDate nextFriday = fromDate.with(
            TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY));
    return IntStream.iterate(0, i -> i + 7)
            .mapToObj(nextFriday::plusDays)
            .filter(date -> date.getDayOfMonth() == 13)
            .findFirst()
            .orElseThrow();
}  

或者,您可以只迭代每个月的13次:

public static LocalDate findFridayThirteen3(LocalDate fromDate) {
    LocalDate nextThirteen = fromDate.getDayOfMonth() > 13 
            ? fromDate.withDayOfMonth(13).plusMonths(1) 
            : fromDate.withDayOfMonth(13);
    return IntStream.iterate(0, i -> i + 1)
            .mapToObj(nextThirteen::plusMonths)
            .filter(date -> date.getDayOfWeek() == DayOfWeek.FRIDAY)
            .findFirst()
            .orElseThrow();
}  

测试:

LocalDate date = LocalDate.of(2022, 1, 1);

LocalDate friday13 = findFridayThirteen(date);

DateTimeFormatter formatter = DateTimeFormatter
        .ofLocalizedDate(FormatStyle.FULL);

System.out.println(friday13.format(formatter));

输出:

Friday, May 13, 2022
衡丰茂
2023-03-14
    public static void main(String[] args) {
    boolean is13Friday = false;
    LocalDate nextFriday = LocalDate.now();
    while (!is13Friday) {
        nextFriday = getNextFriday(nextFriday);
        is13Friday = is13Friday(nextFriday);
    }
    System.out.println(nextFriday);

}

public static LocalDate getNextFriday(LocalDate d) {
    return d.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
}

public static boolean is13Friday(LocalDate d) {
    return d.getDayOfMonth() == 13;
}
巫马阳飙
2023-03-14

只需在LocalDate中添加7天,即可获得预期的日期:

例如:

 LocalDate today = LocalDate.now();

 //tomorrow
 LocalDate tomorrow = today.plusDays(1);

 // next week day
 LocalDate nextWeekDay= today.plusDays(7);

或者通过这个:

today.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
 类似资料:
  • 我有一个任务的问题。我必须得到下周五13日,因为给定的日期使用LocalDate。 你们有什么想法吗?

  • 问题内容: 如何找出上一个(上一个)“星期五”或指定日期之后的其他日期的日期? 问题答案: 我不会给出答案(请先尝试一下!),但是,也许这些技巧可以为您提供帮助。 您首先需要确定您所在的星期几。您可能想看一下Java的Calendar类,以了解如何做到这一点。 确定日期后,请考虑模数运算符以及如何使用该运算符向后移动以从当前所在的日期开始寻找所需的前一天。(请记住,一周是7天,一周中的每一天在这7

  • 问题内容: 下面的代码应在上周五的16:00:00返回。但它返回上周的星期五。如何解决? 更新。我现在使用以下方法-最好的方法吗? Upd2。仅举一个例子。假设今天是 2012年10月5日 。如果当前时间等于或小于 16:00 ,则应返回 2012年9月28日 ,否则返回 2012 年 10月5日 。 问题答案: 与链接的问题一样,您需要使用对象而不是。要获得最终结果,可以使用:

  • 问题内容: 我想找出以下内容:给定日期(对象),星期几是几号? 例如,星期日是第一天,星期一:第二天..依此类推 然后,如果输入的内容类似于今天的日期。 例 输出可能是6(因为它是星期五) 问题答案: 使用: 从文档中: 以整数返回星期几,其中星期一为0,星期日为6。

  • 问题内容: 我想在下一个(例如)星期一的日期/时间创建的实例。 Java Time API中是否有任何方法,还是应该计算当前日期和目标日期之间有多少天,然后使用LocalDateTime.of()方法? 问题答案: 无需手动进行任何计算。 您可以使用方法通过调节器来调节给定的日期。一周的第二天有内置的调节器: 返回下一个星期几调整器,它将日期调整为在调整日期之后指定的星期几中的第一个匹配项。 该代

  • 问题内容: 如何使用Joda-Time API 获得下一个星期五。 在今天的是。在我看来,您必须决定本周星期五之前还是之后。请参阅此方法: 是否可以缩短时间或使用单缸衬套? PS:请不要建议我使用JDK的日期/时间。 Joda-Time是一个更好的API。 Java 8引入了更好的java.time包(Tutorial)。 问题答案: 随着java.time内置到Java 8及更高版本(框架教程)