타사 라이브러리를 사용하지 않고 간단한 Java로 두 날짜 사이에 요일 이름을 가져오고 싶습니다.안드로이드는 두 날짜 사이에 요일 이름을 얻습니다.
토요일, 일요일, 월요일 등 이일을 포함하여 이틀 간의 이름을 모두 가져오고 싶습니다.
타사 라이브러리를 사용하지 않고 간단한 Java로 두 날짜 사이에 요일 이름을 가져오고 싶습니다.안드로이드는 두 날짜 사이에 요일 이름을 얻습니다.
토요일, 일요일, 월요일 등 이일을 포함하여 이틀 간의 이름을 모두 가져오고 싶습니다.
/**
*
* @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]
나는 Joda-Time 도서관, 인기 replacemen을 제안 악명 높은 문제가있는 java.util.Date & java.util.Calendar 클래스는 Java와 함께 번들로 제공됩니다. 그러나 질문에는 제 3 자 라이브러리가 필요하지 않습니다.
그래서, 대신에 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
그에게 좋은 일이 .. – Ranjit