코딩테스트에서 문자열 형식의 날짜를 주고 몇일 후의 날짜를 구하시오 특정일이 지났는지 비교하시오 등의 문제를 풀 때 사용하는 방법
날짜 감, 가산 하는법
import java.text.ParseException;
//.parse를 사용할 때 throw처리해줘야하는 익셉션
import java.text.SimpleDateFormat;
String dateString = new String("문제에서 제공하는 날짜형식의 문자열");
int[] setDate = new int[]{}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calander cal = Calander.getInstance();
Date date = sdf.parse(dateString);
cal.setTime(date);
cal.add(Calander.YEAR, setDate[0]);
cal.add(Calander.MONTH, setDate[1]);
cal.add(Calander.DAY, setDate[2]);
String answer = sdf.format(cal.getTime())
해설
문자열 데이터를 형식에 맞게 Date객체로 변환하고 그걸 Calander객체에 넣어서 감,가산하고 다시 문자열로 리턴하는 방식
날짜의 비교는 Date클래스의 CompareTo를 활용할 수 있다.
dateA.compareTo(dateB);
dateA가 더 빠른 날짜면 (날짜의 절대값이 낮으면) -1리턴
dateA와 dateB가 같은 날짜면 (날짜의 절대값이 낮으면) 0리턴
dateB가 더 빠른 날짜면 (날짜의 절대값이 낮으면) 1리턴
import java.time.format.DateTimeFormatter;
import java.time.LocalDate;
String today = "2020.01.01" // 문제에서 제공해주는 오늘 날짜
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
LocalDate date = LocalDate.parse(today, formatter);
LocalDate compareDate LocalDate.parse(privacy[0], formatter)
.plusMonths(termsMap.get(privacy[1]))
.minusDays(1);
privacyRegisterYmdt.isBefore(date);
매달의 말일을 지정해주는 문제의 경우 Date객체를 사용하지말고 날짜 체계를 새로 정의해서 풀어나가는게 훨씬 효율적이다.
아래 코드는 말일을 28일로 고정했을때의 방식이다.
int daysA = dateA.year * 12 * 28 + dateA.month * 28 + dateA.day
int daysB = dateB.year * 12 * 28 + dateB.month * 28 + dateB.day
daysA < daysB ? -1 : (daysA == daysB ? 0 : 1)
문제에서 주어지는 날짜들도 전부 28일로 통일 시켜버리면서 전부 int형 일 수로 만들어서 사용하기 때문에 이후의 비교 및 계산에서도 훨씬 수월해진다.