어제 오늘 내일

[Java] 특정 날짜의 요일 구하기 (숫자, 영문, 한글) 본문

IT/Java

[Java] 특정 날짜의 요일 구하기 (숫자, 영문, 한글)

hi.anna 2021. 6. 19. 11:30

 

  1. LocalDateTime / LocalDate (Java 8 이후)
  2. Date, Calendar (Java 8 이전)

 

1. LocalDateTime / LocalDate (Java 8 이후)

Java 8 이후에서는,

날짜를 표현하기 위해 java.time.LocalDateTime, java.time.LocalDate 클래스가 주로 사용됩니다.

이 클래스를 사용하여, 날짜를 표현한 후 요일을 구할 수 있습니다.

 

  숫자로 구하기  

import java.time.DayOfWeek;
import java.time.LocalDate;

public class GetDayOfWeek {
    public static void main(String[] args) {

        // 1. LocalDate 생성
        LocalDate date = LocalDate.of(2021, 12, 25);
        // LocalDateTime date = LocalDateTime.of(2021, 12, 25, 1, 15, 20);
        System.out.println(date);  // // 2021-12-25

        // 2. DayOfWeek 객체 구하기
        DayOfWeek dayOfWeek = date.getDayOfWeek();

        // 3. 숫자 요일 구하기
        int dayOfWeekNumber = dayOfWeek.getValue();

        // 4. 숫자 요일 출력
        System.out.println(dayOfWeekNumber);  // 6

    }
}

LocalDate date = LocalDate.of(2021, 12, 25);

LocalDateTime date = LocalDateTime.of(2021, 12, 25, 1, 15, 20);

LocalDate 는 날짜를 나타내는 클래스이고, LocalDateTime은 날짜와 시간을 나타내는 클래스입니다.

이 예제에서는 2021년 12월 25일의 요일을 구합니다.

 

DayOfWeek dayOfWeek = date.getDayOfWeek();

요일을 표현하는 DayOfWeek Enum을 가져옵니다.

이제 이, DayOfWeek Enum 을 가지고, 요일을 구할 수 있습니다.

 

int dayOfWeekNumber = dayOfWeek.getValue();

2021년 12월 25일은 토요일입니다.

DayOfWeek의 getValue() 메소드를 이용하면 요일을 숫자로 가져올 수 있습니다.

월요일부터 일요일까지 1~7의 숫자로 표현됩니다.

즉, 월요일이 1, 일요일이 7입니다.

토요일이므로, 여기서는 6이 리턴되었습니다.

 

LocalDateTime date = LocalDateTime.of(2021, 12, 25, 1, 15, 20);

날짜와 시간을 표현하는 LocalDateTime 클래스에서도

LocalDate와 마찬가지로 getDayOfWeek() 메소드를 이용하여 DayOfWeek Enum을 구할 수 있고,

이 Enum 객체를 이용하여 요일을 구할 수 있습니다.

 

 

텍스트로 구하기 (영문, 한글)

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;

public class GetDayOfWeek {
    public static void main(String[] args) {

        // 1. LocalDate 생성
        LocalDate date = LocalDate.of(2021, 12, 25);
        System.out.println(date); // 2021-12-25

        // 2. DayOfWeek 객체 구하기
        DayOfWeek dayOfWeek = date.getDayOfWeek();

        // 3. 텍스트 요일 구하기 (영문)
        System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.US));  // Saturday
        System.out.println(dayOfWeek.getDisplayName(TextStyle.NARROW, Locale.US));  // S
        System.out.println(dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.US));  // Sat

        // 4. 텍스트 요일 구하기 (한글)
        System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.KOREAN));  // 토요일
        System.out.println(dayOfWeek.getDisplayName(TextStyle.NARROW, Locale.KOREAN));  // 토
        System.out.println(dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.KOREAN));  // 토

        // 5. 텍스트 요일 구하기 (default)
        System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.getDefault()));  // 토요일

    }
}

LocalDate date = LocalDate.of(2021, 12, 25);

DayOfWeek dayOfWeek = date.getDayOfWeek();

앞의 예제와 마찬가지로

먼저 LocalDate 또는 LocalDateTime 객체로부터 DayOfWeek 객체를 얻어옵니다.

 

dayOfWeek.getDisplayName(TextStyle.FULL, Locale.US);

dayOfWeek.getDisplayName(TextStyle.NARROW, Locale.US);

dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.US);

public String getDisplayName(TextStyle style, Locale locale)

DayOfWeek 클래스의 getDisplayName() 메소드는 요일을 텍스트로 리턴합니다.

TextStyle은 요일을 어떤 형식으로 보여줄지 결정합니다.

TextStyle.Full, TextStyle.NARROW, TextStyle.SHORT 이렇게 3개의 값을 사용할 수 있는데

TextStyle.Full은 요일의 전체 텍스트를,

TextStyle.NARROW, TextStyle.SHORT는 요일을 표현하는 단축형 표현을 나타냅니다.

각 TextStyle에 대한 정의는 Locale마다 다릅니다.

위 예제에서는 Locale을 US로 지정하여서

Saturday, S, Sat를 각각 리턴하였습니다.

여기서 주의할 것이 있는데,

Locale을 US로 설정하고, TextStyle.NARROW로 설정할 경우

Saturday와 Sunday 모두 'S'가 출력되어 구분이 되지 않을 수 있기 때문에

이것에 주의해야 합니다.

 

dayOfWeek.getDisplayName(TextStyle.FULL, Locale.KOREAN);

dayOfWeek.getDisplayName(TextStyle.NARROW, Locale.KOREAN);

dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.KOREAN);

Locale를 KOREAN으로 설정하여, 

요일의 한글명을 가져왔습니다.

 

dayOfWeek.getDisplayName(TextStyle.FULL, Locale.getDefault());

위와 같이 디폴트로 설정된 Locale을 지정할 수도 있습니다.

 

 

 

2. Date, Calendar (Java 8 이전)

Java 8 이전에는,

날짜를 표현하기 위해 java.util.Date 또는 java.util.Calendar 클래스를 사용할 수 있었습니다.

(하지만, Date 클래스는 현재 많은 메소드들이 deprecated 되었고,

사용을 권장하지 않습니다.)

 

숫자로 구하기

import java.util.Calendar;
import java.util.Date;

public class GetDayOfWeekForDate {
    public static void main(String[] args) {
        // 1. Date 생성 / 현재 날짜
        Date currentDate = new Date();
        System.out.println(currentDate); // Sat Jun 19 11:07:17 KST 2021

        // 2. Calendar 생성
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);

        // 3. 텍스트 요일 구하기 (숫자)
        int dayOfWeekNumber = calendar.get(Calendar.DAY_OF_WEEK);

        // 4. 요일 출력
        System.out.println(dayOfWeekNumber);  // 7
    }
}

이번에는 현재 날짜를 가져와서 요일을 판단해 보았습니다.

현재 날짜는 '2021-06-19'로 토요일입니다.

 

int dayOfWeekNumber = calendar.get(Calendar.DAY_OF_WEEK);

Calendar의 get() 메소드에 필드값(DAY_OF_WEEK)를 전달하여

요일을 나타내는 숫자를 가져왔습니다.

이 때 리턴되는 숫자는 1~7로,

1은 일요일, 7은 토요일을 나타냅니다.

앞에서 소개한 DayOfWeek 객체를 사용해서 요일을 가져올 때는

1은 월요일, 7은 일요일입니다.

두 가지 방법으로 가져오는 숫자의 의미가 다르다는 것에 주의하세요.

 

 

텍스트로 구하기 ( 한글, 영문 )

import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

public class GetDayOfWeekForDate {
    public static void main(String[] args) {
        // 1. Date 생성 / 현재 날짜
        Date currentDate = new Date();
        System.out.println(currentDate); // Sat Jun 19 11:07:17 KST 2021

        // 2. Calendar 생성
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);

        // 3. 텍스트 요일 구하기 (영문)
        System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US)); // Saturday
        System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.NARROW_FORMAT, Locale.US)); // S
        System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US)); // Sat

        // 4. 텍스트 요일 구하기 (한글)
        System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.KOREAN)); // 토요일
        System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.NARROW_FORMAT, Locale.KOREAN)); // 토
        System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.KOREAN)); // 토

        // 5. 텍스트 요일 구하기 (default)
        System.out.println(calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault())); // 토요일
    }
}

현재 날짜를 가져와서, 요일을 판단하여 텍스트로 출력하는 예제입니다.

현재 날짜는 '2021-06-19'로 토요일입니다.

 

calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US);

calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.NARROW_FORMAT, Locale.US);

calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US);

public String getDisplayName(int field, int style, Locale locale)

Calendar 클래스의 getDisplayName() 메소드는

파라미터로 전달받은 field의 값을 style과 locale을 적용하여

텍스트로 리턴합니다.

 

요일을 구하기 위해서 field에는 Calendar.DAY_OF_WEEK 상수를 전달합니다.

style 항목에는 Calendar의 상수 중 다음의 상수를 전달 할 수 있습니다.

  • SHORT_FORMAT
  • SHORT
  • SHORT_STANDALONE
  • LONG_FORMAT
  • LONG
  • LONG_STANDALONE
  • NARROW_FORMAT
  • NARROW_STANDALONE

 

calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.KOREAN);

calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.NARROW_FORMAT, Locale.KOREAN);

calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.KOREAN);

Locale을 KOREAN으로 전달하여

요일을 한글로 출력할 수 있습니다.

 

calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());

Locale을 default값으로 설정할 수 있습니다.

 


 

Java API를 이용해서 요일을 구하는 방법을 알아보았습니다.

 

 

 

반응형
Comments