从一周的数字到Joda Time的日期名称

Ody*_*see 16 java jodatime

我有一周中一天数字:2(如果星期一开始一周,则应与星期二相匹配).

从这个数字有一种方法可以使用Joda Time获取Java中的当天名称吗?在javascript中使用moment.js很容易做到:

moment().day(my number)
Run Code Online (Sandbox Code Playgroud)

Men*_*ild 36

乔达时间

至少这是有效的,虽然我认为它不太好:

LocalDate date = new LocalDate();
date = date.withDayOfWeek(2);
System.out.println(DateTimeFormat.forPattern("EEEE").print(date));
Run Code Online (Sandbox Code Playgroud)

不幸的是Joda-Time没有提供星期几的枚举(java.time确实).我还没有在巨大的api中找到另一种方式.也许一些Joda专家知道更好的解决方案.

添加(感谢@BasilBourque):

LocalDate date = new LocalDate();
date = date.withDayOfWeek(2);
System.out.println(date.dayOfWeek().getAsText());
Run Code Online (Sandbox Code Playgroud)

java.time

java.time(JSR 310,Java 8和更高版本)中,使用枚举.DayOfWeek

int day = 2;
System.out.println( DayOfWeek.of(2).getDisplayName(TextStyle.FULL, Locale.ENGLISH) );
// Output: Tuesday
Run Code Online (Sandbox Code Playgroud)

您可以使用特定的枚举实例,而不是直接一个神奇的数字一样2.该DayOfWeek枚举为一周的每一天如一个实例DayOfWeek.TUESDAY.

System.out.println( DayOfWeek.TUESDAY.getDisplayName(TextStyle.FULL, Locale.ENGLISH) );
// Output: Tuesday
Run Code Online (Sandbox Code Playgroud)

老JDK

为了完成它,这里是旧JDK的解决方案:

int day = 2;
DateFormatSymbols dfs = DateFormatSymbols.getInstance(Locale.ENGLISH);
System.out.println(dfs.getWeekdays()[day % 7 + 1]);
Run Code Online (Sandbox Code Playgroud)