2017-05-29 68 views
3

我需要轉換成DayOfWeek一個String轉換器和給周圍的其他方式的一些LocaleTextStyle。 一種方法是直截了當:有星期幾的反函數:: getDisplayName()

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

對於我沒有找到在java.time包的任何有用的方法的另一種方式。我正在尋找類似LocalDate::parse(CharSequence text, DateTimeFormatter formatter)但是DayOfWeek

+2

如果你的'DateTimeFormatter'在它的模式中有星期幾,那麼解析就做你想要的。 –

回答

3

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()) 
+1

謝謝!正是我在找什麼。我沒有意識到'DateTimeFormatterBuilder'-API ...看起來相當強大:-) –

+0

的確,這是一個非常強大且有用的類! – 2017-05-29 17:14:29

+1

非常優雅和一般。 –