Joda времени
Обычно я хотел бы предложить Joda-Time библиотеку, популярный replacemen t для заведомо проблемного java.util.Date & java.util.Calendar классы в комплекте с Java. Но вопрос не требует сторонних библиотек.
java.time. *
Таким образом, вместо Joda-Time, мой пример ниже код использует новый java.time.* package в комплекте с Java 8. Эти классы вдохновлены Joda-Time, но полностью перепроектированы. Они определены как JSR 310. Для получения дополнительной информации см. Раздел new Tutorial от Oracle.
Решение довольно простое. Кипит до этого фрагмента одной строки ...
DayOfWeek.from(zonedDateTime).getDisplayName(TextStyle.FULL, Locale.US);
Для удовольствия, я бросил на дополнительной линии, чтобы показать, как легко локализовать. В этом случае я показываю французское, а также американское английское слово за день недели.
Вот весь фрагмент, готовый к запуску, если вы импортируете java.time.*
и java.time.format.*
.
ZoneId timeZone = ZoneId.of("America/New_York");
ZonedDateTime start = ZonedDateTime.now(timeZone);
ZonedDateTime stop = start.plusDays(2);
// Usually spans of time are handled in a "half-open" manner, meaning start is inclusive and stop is exclusive.
// But the Question required both start and stop to be inclusive. So add "1".
long days = java.time.temporal.ChronoUnit.DAYS.between(start, stop) + 1L;
System.out.println(days + " days from " + start + " to " + stop + " inclusive…");
for (int i = 0; i < days; i++) {
ZonedDateTime zonedDateTime = start.plusDays(i);
String dayOfWeek = DayOfWeek.from(zonedDateTime).getDisplayName(TextStyle.FULL, java.util.Locale.US);
String dayOfWeek_Français = DayOfWeek.from(zonedDateTime).getDisplayName(TextStyle.FULL, java.util.Locale.FRENCH);
System.out.println("zonedDateTime: " + zonedDateTime + " dayOfWeek: " + dayOfWeek + " dayOfWeek_Français: " + dayOfWeek_Français);
}
При запуске ...
3 days from 2014-02-08T06:06:33.335-05:00[America/New_York] to 2014-02-10T06:06:33.335-05:00[America/New_York] inclusive…
zonedDateTime: 2014-02-08T06:06:33.335-05:00[America/New_York] dayOfWeek: Saturday dayOfWeek_Français: samedi
zonedDateTime: 2014-02-09T06:06:33.335-05:00[America/New_York] dayOfWeek: Sunday dayOfWeek_Français: dimanche
zonedDateTime: 2014-02-10T06:06:33.335-05:00[America/New_York] dayOfWeek: Monday dayOfWeek_Français: lundi
сво хорошая вещь .. – Ranjit