DayOfWeek::getDisplayName() 是否有反函数

Is there an inverse function of DayOfWeek::getDisplayName()

我需要一个转换器,可以将 DayOfWeek 转换为 String,并在给定一些 LocaleTextStyle 的情况下反过来转换。 一种方法是直接的:

public String getAsString(DayOfWeek day, TextStyle style, Locale locale){
    return day.getDisplayName(style, locale);
}

另一方面,我没有在java.time包中找到任何有用的方法。我正在寻找 LocalDate::parse(CharSequence text, DateTimeFormatter formatter) 之类的东西,但 DayOfWeek.

DayOfWeek 没有 parse 方法,但您可以构建一个 DateTimeFormatter 并将其与 DayOfWeek::from 一起使用来解析 String

import java.time.temporal.ChronoField;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;

public DayOfWeek parseFromString(String str, TextStyle style, Locale locale) {
    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        // Day of the week field, using the same TextStyle
        .appendText(ChronoField.DAY_OF_WEEK, style)
        // use the same locale
        .toFormatter(locale);
    // parse returns a TemporalAccessor, DayOfWeek::from converts it to a DayOfWeek object
    return formatter.parse(str, DayOfWeek::from);
}

这样,您可以从您创建的 String 中获取 DayOfWeek

String dayOfWeekString = getAsString(DayOfWeek.MONDAY, TextStyle.FULL, Locale.US);
System.out.println(dayOfWeekString); // monday

DayOfWeek dayOfWeek = parseFromString(dayOfWeekString, TextStyle.FULL, Locale.US);
System.out.println(dayOfWeek); // MONDAY (return of DayOfWeek.toString())