获取java8中的周一和周日

介绍

在Java 8中,我们可以使用java.time包中的LocalDate类来获取当前日期,然后通过一些计算来获得周一和周日的日期。本文将向你展示如何实现这一过程。

流程图

flowchart TD
    A[获取当前日期] -->B[计算与周一的偏移量]
    B -->C{偏移量是否为0}
    C -- 是 --> D[返回当前日期]
    C -- 否 --> E[计算周一的日期]
    E --> F[计算与周日的偏移量]
    F --> G{偏移量是否为6}
    G -- 是 --> H[返回当前日期]
    G -- 否 --> I[计算周日的日期]

步骤

下面是实现获取周一和周日的步骤:

步骤 代码 说明
1 LocalDate currentDate = LocalDate.now(); 获取当前日期
2 int offsetToMonday = DayOfWeek.from(currentDate).getValue() - DayOfWeek.MONDAY.getValue(); 计算当前日期与周一的偏移量
3 if (offsetToMonday == 0) return currentDate; 如果偏移量为0,直接返回当前日期
4 LocalDate monday = currentDate.minusDays(offsetToMonday); 计算周一的日期
5 int offsetToSunday = DayOfWeek.SUNDAY.getValue() - DayOfWeek.from(currentDate).getValue(); 计算当前日期与周日的偏移量
6 if (offsetToSunday == 6) return currentDate; 如果偏移量为6,直接返回当前日期
7 LocalDate sunday = currentDate.plusDays(offsetToSunday); 计算周日的日期
8 return monday; 返回周一的日期
9 return sunday; 返回周日的日期

代码实现

下面是完整的代码实现:

import java.time.DayOfWeek;
import java.time.LocalDate;

public class WeekDayUtils {

    public static LocalDate getMonday() {
        LocalDate currentDate = LocalDate.now();
        int offsetToMonday = DayOfWeek.from(currentDate).getValue() - DayOfWeek.MONDAY.getValue();
        if (offsetToMonday == 0) return currentDate;
        LocalDate monday = currentDate.minusDays(offsetToMonday);
        return monday;
    }

    public static LocalDate getSunday() {
        LocalDate currentDate = LocalDate.now();
        int offsetToSunday = DayOfWeek.SUNDAY.getValue() - DayOfWeek.from(currentDate).getValue();
        if (offsetToSunday == 6) return currentDate;
        LocalDate sunday = currentDate.plusDays(offsetToSunday);
        return sunday;
    }

    public static void main(String[] args) {
        LocalDate monday = getMonday();
        LocalDate sunday = getSunday();
        System.out.println("周一:" + monday);
        System.out.println("周日:" + sunday);
    }
}

以上代码中,getMonday()方法用于获取当前周一的日期,getSunday()方法用于获取当前周日的日期。在main()方法中,我们可以直接调用这两个方法来获取并输出周一和周日的日期。

类关系图

下面是本文所使用的类之间的关系图:

erDiagram
    class LocalDate {
        + LocalDate now()
        + LocalDate minusDays(int days)
        + LocalDate plusDays(int days)
    }
    class DayOfWeek {
        + int getValue()
        + static DayOfWeek from(TemporalAccessor temporal)
        + static DayOfWeek MONDAY
        + static DayOfWeek SUNDAY
    }
    class WeekDayUtils {
        + LocalDate getMonday()
        + LocalDate getSunday()
        + void main(String[] args)
    }

在上面的类关系图中,LocalDate类提供了一些方法来操作日期,DayOfWeek类表示星期几,WeekDayUtils类是我们自己定义的工具类,用于获取周一和周日的日期。

总结

通过本文,我们了解了如何使用Java 8中的java.time包来获取周一和周日的日期。我们使用了LocalDate类来获取当前日期,并使用一些计算来获得周一和周日的日期。通过理解这个流程和代码,刚入行的小白也能够轻松地实现这个功能。