如何使用java.time.DayOfWeek枚举?

在java.time.DayOfWeekJava中8日期时间API枚举描述了一周的日子。枚举具有从DayOfWeek.MONDAY到的常量值DayOfWeek.SUNDAY。这些枚举也具有其1等于MONDAY和7等于的整数值SUNDAY。

在下面的代码片段中,您可以看到一些DayOfWeek枚举的用法。我们首先使用values()返回的数组的方法获取所有枚举值DayOfWeek。我们迭代此数组并打印出枚举值及其对应的整数值。

// 获取DayOfWeek枚举值
DayOfWeek[] dayOfWeeks = DayOfWeek.values();
for (int i = 0; i < dayOfWeeks.length; i++) {
    DayOfWeek dayOfWeek = dayOfWeeks[i];
    System.out.println("dayOfWeek[" + i + "] = " + dayOfWeek + "; value = " +
            dayOfWeek.getValue());
}

要创建DayOfWeek对象,我们可以使用of(int)工厂方法。我们传递此方法的整数值。例如,给予1将给我们带来收益DayOfWeek.MONDAY。我们还可以利用枚举valueOf(String)方法从字符串值创建枚举。

// 从int值获取DayOfWeek
DayOfWeek dayOfWeek = DayOfWeek.of(1);
System.out.println("dayOfWeek = " + dayOfWeek);

// 从字符串值获取DayOfWeek
dayOfWeek = DayOfWeek.valueOf("SATURDAY");
System.out.println("dayOfWeek = " + dayOfWeek);

要从DayOfWeek日期时间对象获取,我们可以使用getDayOfWeek()方法。在下面,我们从一个LocalDate对象获取星期几。

// 获取日期对象的DayOfWeek
LocalDate date = LocalDate.now();
DayOfWeek dow = date.getDayOfWeek();

System.out.println("Date  = " + date);
System.out.println("Dow   = " + dow + "; value = " + dow.getValue());

我们还可以获取特定语言环境的星期几。为此,我们可以使用该DayOfWeek.getDisplayName(TextStyle, Locale)方法。该TextStyle可以是有价值的TextStyle.FULL,TextStyle.SHORT,TextStyle.NARROW这将给我们充分,短,窄版的显示名称。下面的示例获取印度尼西亚语和德语版本的显示名称。

// 获取不同语言环境的DayOfWeek显示名称。
Locale locale = new Locale("id", "ID");
String indonesian = dow.getDisplayName(TextStyle.SHORT, locale);
System.out.println("ID = " + indonesian);

String germany = dow.getDisplayName(TextStyle.FULL, Locale.GERMANY);
System.out.println("DE = " + germany);

还有plus(long)一种可用于增加DayOfWeek对象天数的方法。例如,加4MONDAY将给我们DayOfWeek.FRIDAY。

// 将天数添加到DayOfWeek枚举中。
System.out.println("DayOfWeek.MONDAY.plus(4) = " + DayOfWeek.MONDAY.plus(4));

这是上述代码段的完整代码:

package org.nhooo.example.datetime;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;

public class DayOffWeekExample {
    public static void main(String[] args) {
        // 获取DayOfWeek枚举值
        DayOfWeek[] dayOfWeeks = DayOfWeek.values();
        for (int i = 0; i < dayOfWeeks.length; i++) {
            DayOfWeek dayOfWeek = dayOfWeeks[i];
            System.out.println("dayOfWeek[" + i + "] = " + dayOfWeek + "; value = " + 
                    dayOfWeek.getValue());
        }

        // 从int值获取DayOfWeek
        DayOfWeek dayOfWeek = DayOfWeek.of(1);
        System.out.println("dayOfWeek = " + dayOfWeek);

        // 从字符串值获取DayOfWeek
        dayOfWeek = DayOfWeek.valueOf("SATURDAY");
        System.out.println("dayOfWeek = " + dayOfWeek);

        // 获取日期对象的DayOfWeek
        LocalDate date = LocalDate.now();
        DayOfWeek dow = date.getDayOfWeek();

        System.out.println("Date  = " + date);
        System.out.println("Dow   = " + dow + "; value = " + dow.getValue());

        // 获取不同语言环境的DayOfWeek显示名称。
        Locale locale = new Locale("id", "ID");
        String indonesian = dow.getDisplayName(TextStyle.SHORT, locale);
        System.out.println("ID = " + indonesian);

        String germany = dow.getDisplayName(TextStyle.FULL, Locale.GERMANY);
        System.out.println("DE = " + germany);

        // 将天数添加到DayOfWeek枚举中。
        System.out.println("DayOfWeek.MONDAY.plus(4) = " + DayOfWeek.MONDAY.plus(4));
    }
}

上面代码的结果是:

dayOfWeek[0] = MONDAY; value = 1
dayOfWeek[1] = TUESDAY; value = 2
dayOfWeek[2] = WEDNESDAY; value = 3
dayOfWeek[3] = THURSDAY; value = 4
dayOfWeek[4] = FRIDAY; value = 5
dayOfWeek[5] = SATURDAY; value = 6
dayOfWeek[6] = SUNDAY; value = 7
dayOfWeek = MONDAY
dayOfWeek = SATURDAY
Date  = 2015-11-16
Dow   = MONDAY; value = 1
ID = Sen
DE = Montag
DayOfWeek.MONDAY.plus(4) = FRIDAY