2014-02-08 4 views

답변

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을 제안 악명 높은 문제가있는 java.util.Date & java.util.Calendar 클래스는 Java와 함께 번들로 제공됩니다. 그러나 질문에는 제 3 자 라이브러리가 필요하지 않습니다.

는 java.time. *

그래서, 대신에 Joda 타임의, 내 아래 코드 예제 Java 8 함께 번들로 제공되는 새로운 java.time.* package 사용합니다. 이 수업은 Joda-Time에서 영감을 얻었으나 완전히 재구성되었습니다. 그들은 JSR 310에 의해 정의됩니다. 자세한 정보는 Oracle의 new Tutorial을 참조하십시오.

해결책은 간단합니다. 이 한 줄짜리 단편으로 내려갑니다 ...

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