2014-01-03 5 views
15

У меня есть день недели номер: 2 (который должен совпадать со вторником, если неделя начнется в понедельник).Со дня недели номер получайте название дня с Joda Time

Из этого номера есть способ получить имя дня на Java с использованием Joda Time? В JavaScript это было довольно легко сделать это с помощью moment.js:

moment().day(my number) 

ответ

32

Joda-Time

По крайней мере, это работает, хотя я считаю это не так приятно:

LocalDate date = new LocalDate(); 
date = date.withDayOfWeek(2); 
System.out.println(DateTimeFormat.forPattern("EEEE").print(date)); 

К сожалению, Joda-Time не предлагает перечисление на день недели (java.time делает). Я не нашел другого пути в огромной апи. Может быть, некоторые эксперты Joda знают лучшее решение.

Добавлено (благодаря @BasilBourque):

LocalDate date = new LocalDate(); 
date = date.withDayOfWeek(2); 
System.out.println(date.dayOfWeek().getAsText()); 

java.time

В java.time (JSR 310, Java 8 и выше), используйте DayOfWeekenum.

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

Вы можете использовать конкретный экземпляр перечисления непосредственно, а не magic number как 2. Перечисление DayOfWeek предоставляет экземпляр для каждого дня недели, например DayOfWeek.TUESDAY.

System.out.println(DayOfWeek.TUESDAY.getDisplayName(TextStyle.FULL, Locale.ENGLISH)); 
// Output: Tuesday 

Старый JDK

Для изготовления его полной, здесь решение старой версии JDK:

int day = 2; 
DateFormatSymbols dfs = DateFormatSymbols.getInstance(Locale.ENGLISH); 
System.out.println(dfs.getWeekdays()[day % 7 + 1]); 
+0

Awesom е! Спасибо за этот полный ответ. – Odyssee

0

Вы можете сделать это самостоятельно

String[] dayNames = new String[]{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; 
String name = dayNames[day-1]; 

И это даже не требует любая библиотека :)

+3

Да без библиотеки, но не работает в интернационализированном сценарии. Кстати, ваше решение не соответствует требуемому порядку индекса. OP хочет номер 2, ваше решение затем даст среду вместо вторника. –

+0

Это охватывает английский язык. Использование Joda-Time дает локализацию на других языках. –

Смежные вопросы