TL; DR
핵심 코드 개념 :
EnumSet.of(DayOfWeek.SATURDAY , DayOfWeek.SUNDAY)
.contains(
LocalDate.now(ZoneId.of("America/Montreal"))
.getDayOfWeek()
)
java.time
현대적인 방법은 java.time 클래스와 함께입니다.
DayOfWeek
enum은 월요일부터 일요일까지 7 개의 개체를 제공합니다.
LocalDate
클래스는 time-of-day 및 시간대가없는 날짜 전용 값을 나타냅니다.
날짜를 결정하는 데 시간대가 중요합니다. 어떤 주어진 순간에, 날짜는 지구에 따라 지역마다 다릅니다. 예를 들어, 자정 몇 분 후 Paris France은 새로운 날이며, 어제는 "Montréal Québec"입니다.
ZoneId z = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(z);
DayOfWeek dow = today.getDayOfWeek();
DayOfWeek
개체로 주말을 정의하십시오. EnumSet
은 DayOfWeek
과 같은 Enum
개 개체를 보유하도록 설계된 Set
의 특히 빠르고 메모리가 적은 구현입니다.
Set<DayOfWeek> weekend = EnumSet.of(DayOfWeek.SATURDAY , DayOfWeek.SUNDAY);
이제 우리는 오늘이 평일인지 주말인지를 테스트 할 수 있습니다.
Boolean todayIsWeekend = weekend.contains(dow);
질문은 이번 주말이면 다음 주에 시작하겠습니다. 그렇게하려면 날짜 시간 객체를 조작 할 수있는 클래스를 제공하는 TemporalAdjuster
을 사용하십시오. java.time에는 immutable objects이 있습니다. 즉, 원래 개체를 변경 ("변경")하지 않고 기존 개체의 값을 기반으로 새 인스턴스를 생성합니다. TemporalAdjusters
클래스 (복수형에주의)는 TemporalAdjuster
(next(DayOfWeek)
포함)의 편리한 구현을 제공합니다.
DayOfWeek firstDayOfWeek = DayOfWeek.MONDAY ;
LocalDate startOfWeek = null ;
if(todayIsWeekend) {
startOfWeek = today.with(TemporalAdjusters.next(firstDayOfWeek));
} else {
startOfWeek = today.with(TemporalAdjusters.previousOrSame(firstDayOfWeek));
}
주말 정의가 변경되는 경우를 대비하여 해당 주간의 길이를 소프트 코딩합니다.
LocalDate ld = startOfWeek ;
int countDaysToPrint = (DayOfWeek.values().length - weekend.size());
for(int i = 1 ; i <= countDaysToPrint ; i++) {
System.out.println(ld);
// Set up the next loop.
ld = ld.plusDays(1);
}
live code in IdeOne.com을 참조하십시오. java.time
소개
Joda-Time 프로젝트는 지금 maintenance mode에, java.time로 마이그레이션을 조언한다.
자세히 알아 보려면 Oracle Tutorial을 참조하십시오. 그리고 많은 예제와 설명을 위해 스택 오버플로를 검색하십시오. 사양은 JSR 310입니다.
어디에서 java.time 클래스를 얻을 수 있습니까?
ThreeTen-Extra 프로젝트는 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 가능성을 입증합니다. 여기에 Interval
, YearWeek
, YearQuarter
및 more과 같은 유용한 클래스가 있습니다.
답장을 보내 주셔서 감사합니다. 만약 내가 그것을 실행한다면 그것은 요일이 2라고 (일요일에 여기에있다). 그래서 그것을 위해 넣었습니다 그리고 월요일부터 3시 시작합니다 .... 맞습니까? – Cristian
많은 분들께 감사드립니다 !!!!! – Cristian
'dayOfWeek == 6'등보다 'dayOfWeek == Calendar.FRIDAY'를 사용 하시겠습니까? –