工作日的德语字符串输入到 Localdate
String input of weekdays in German to Localdate
我有一个德语工作日字符串输入,需要获取今天之后的下一个 Localdate
,它对应于给定的工作日字符串。例如,如果输入是 Montag
(星期一),我需要输出为 2022-05-16
的 Localdate
,即今天之后的下一个星期一。如果输入的是英文,我可以这样做:
String input = "Monday";
LocalDate today = LocalDate.now();
LocalDate nextWeekday = today.with(TemporalAdjusters.next(DayOfWeek.valueOf(input.toUpperCase())));
System.out.println(nextWeekday);
有什么我可以做的吗,可能是使用 Locale
,使用德语中给出的字符串(天)来获取下一个工作日作为 Localdate
?如果可能而不定义我自己的枚举?我想避免做
public enum DayOfWeekGerman {
MONTAG,
DIENSTAG,
MITTWOCH,
...
//methods & getters
}
并以某种方式映射它们以使用 java.time API 方法,例如 Localdate.with...
java.time的类是数据类。他们没有语言环境。它们恰好是英文名称,只是因为 Java 语言本身是英文的。
但是,您可以创建一个 Map
来从名称中查找 DayOfWeek 值:
private static final Map<String, DayOfWeek> germanDaysOfWeek =
Arrays.stream(DayOfWeek.values()).collect(
Collectors.toMap(
d -> d.getDisplayName(TextStyle.FULL, Locale.GERMAN), d -> d));
{Freitag=FRIDAY, Samstag=SATURDAY, Montag=MONDAY, Mittwoch=WEDNESDAY, Donnerstag=THURSDAY, Dienstag=TUESDAY, Sonntag=SUNDAY}
对该地图执行查找。
String input = "Montag";
LocalDate today = LocalDate.now();
LocalDate nextWeekday = today.with(
TemporalAdjusters.next(germanDaysOfWeek.get(input)));
查看所有这些 code run live at Ideone.com。
2022-05-16
考虑到今天是09/May/2022 (Monday)
,你可以试试:
String input = "Montag";
LocalDate today = LocalDate.now();
DayOfWeek weekday = DayOfWeek.from(
DateTimeFormatter.ofPattern("EEEE", Locale.GERMAN).parse(input));
LocalDate nextWeekday = today.with(TemporalAdjusters.next(weekday));
System.out.println(nextWeekday);
输出:
2022-05-16
如果您在其他任何一天执行它,您可能会根据星期和日期得到不同的输出。
我有一个德语工作日字符串输入,需要获取今天之后的下一个 Localdate
,它对应于给定的工作日字符串。例如,如果输入是 Montag
(星期一),我需要输出为 2022-05-16
的 Localdate
,即今天之后的下一个星期一。如果输入的是英文,我可以这样做:
String input = "Monday";
LocalDate today = LocalDate.now();
LocalDate nextWeekday = today.with(TemporalAdjusters.next(DayOfWeek.valueOf(input.toUpperCase())));
System.out.println(nextWeekday);
有什么我可以做的吗,可能是使用 Locale
,使用德语中给出的字符串(天)来获取下一个工作日作为 Localdate
?如果可能而不定义我自己的枚举?我想避免做
public enum DayOfWeekGerman {
MONTAG,
DIENSTAG,
MITTWOCH,
...
//methods & getters
}
并以某种方式映射它们以使用 java.time API 方法,例如 Localdate.with...
java.time的类是数据类。他们没有语言环境。它们恰好是英文名称,只是因为 Java 语言本身是英文的。
但是,您可以创建一个 Map
来从名称中查找 DayOfWeek 值:
private static final Map<String, DayOfWeek> germanDaysOfWeek =
Arrays.stream(DayOfWeek.values()).collect(
Collectors.toMap(
d -> d.getDisplayName(TextStyle.FULL, Locale.GERMAN), d -> d));
{Freitag=FRIDAY, Samstag=SATURDAY, Montag=MONDAY, Mittwoch=WEDNESDAY, Donnerstag=THURSDAY, Dienstag=TUESDAY, Sonntag=SUNDAY}
对该地图执行查找。
String input = "Montag";
LocalDate today = LocalDate.now();
LocalDate nextWeekday = today.with(
TemporalAdjusters.next(germanDaysOfWeek.get(input)));
查看所有这些 code run live at Ideone.com。
2022-05-16
考虑到今天是09/May/2022 (Monday)
,你可以试试:
String input = "Montag";
LocalDate today = LocalDate.now();
DayOfWeek weekday = DayOfWeek.from(
DateTimeFormatter.ofPattern("EEEE", Locale.GERMAN).parse(input));
LocalDate nextWeekday = today.with(TemporalAdjusters.next(weekday));
System.out.println(nextWeekday);
输出:
2022-05-16
如果您在其他任何一天执行它,您可能会根据星期和日期得到不同的输出。