2014-02-08 3 views
2

Я хочу получить имена дней между двумя датами с простой Java, без использования какой-либо сторонней библиотеки.Android получить названия дней недели между двумя датами

Я хочу получить такие имена, как суббота, воскресенье, понедельник между двумя днями, включая оба.

+1

сво хорошая вещь .. – Ranjit

ответ

2
/** 
    * 
    * @param startDate 
    * @param endDate 
    * @return Start Date and End Date are <b>Inclusive</b>, days returned between these two dates 
    */ 
    protected List<String> getWeekDayNames(Date startDate, Date endDate) { 
     List<String> days = new ArrayList<String>(); 

     Calendar startCal = Calendar.getInstance(); 
     startCal.setTime(startDate); 

     Calendar endCal = Calendar.getInstance(); 
     endCal.setTime(endDate); 

     if (startCal.getTimeInMillis() == endCal.getTimeInMillis()) { 

      days.add(this.formatDayOfWeek(startCal.getTime())); 

      return Collections.unmodifiableList(days); 
     } 
     // swap values 
     if (startCal.getTimeInMillis() > endCal.getTimeInMillis()) { 
      startCal.setTime(endDate); 
      endCal.setTime(startDate); 
     } 

     do { 

      days.add(this.formatDayOfWeek(startCal.getTime())); 

      startCal.add(Calendar.DAY_OF_MONTH, 1); 

     } while (startCal.getTimeInMillis() <= endCal.getTimeInMillis()); 

     return Collections.unmodifiableList(days); 
    } 

Использование:

Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.DAY_OF_MONTH, 15); 

     List<String> list = new Test().getWeekDayNames(new Date(), cal.getTime()); 

     System.out.println(list); 

Выход:

[SATURDAY, SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY] 
1

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 
Смежные вопросы