특정 날짜 요일 구하기 (숫자)
mport 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
}
}
특정 날짜 요일 구하기(영문, 한글)
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())); // 토요일
}
}
방법1. LocalDate와 switch-case로 풀기
package Day1106;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.StringTokenizer;
public class B1924 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
// 특정 날짜 요일 구하기
LocalDate date = LocalDate.of(2007, x, y);
DayOfWeek dayOfWeek = date.getDayOfWeek();
int dayOfWeekNumber = dayOfWeek.getValue();
// 숫자 요일 출력
String result = "";
switch (dayOfWeekNumber) {
case 1:
result = "MON";
break;
case 2:
result = "TUE";
break;
case 3:
result = "WED";
break;
case 4:
result = "THU";
break;
case 5:
result = "FRI";
break;
case 6:
result = "SAT";
break;
case 7:
result = "SUN";
break;
}
System.out.println(result);
}
}
방법2. dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.US).toUpperCase()) 사용하기
package Day1106;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;
import java.util.StringTokenizer;
public class B1924_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
// 특정 날짜 요일 구하기(영문 대문자)
LocalDate date = LocalDate.of(2007, x, y);
DayOfWeek dayOfWeek = date.getDayOfWeek();
System.out.println(dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.US).toUpperCase()); // Sat
}
}
두번째 방법이 코드가 훨씬 짦아 시간도 단축될거라 생각했늗네
오히려
2배가까이 소요되었다…
방법3 -배열
다른 사람들은 어떻게 풀었나 보는데 다들 배열을 이용해서 비교하는 방법을 사용했길래
다시 풀어보았다.
package Day1106;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class B1924_3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int[] month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
String[] dayOfWeek = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };
// 월 다 더하기
int result = 0;
for (int i = 0; i < x; i++) {
result += month[i];
}
// x달의 추가적 y일수 다 더하기
result += y - 1;
System.out.println(dayOfWeek[result % 7]);
}
}
- 배열로 구하기
- LocalDate와 switch-case로 풀기
- dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.US).toUpperCase()) 사용하기
순으로 시간이 빠르다.