개요
안녕하세요 빈코입니다! 오늘은 Java 프로젝트를 진행하면서 제가 실무에서 자주 사용한 날짜 함수 몇 가지를 소개하려고 합니다. 실무에서는 대부분 자주 사용하는 함수들을 Util 클래스로 따로 만들어서 Controller나 Service단에서 호출하여 사용을 하는데, 특정 커스텀을 제외하고 대중적으로 사용되는 Data 관련 함수들을 살펴볼게요😊
DateUtil 생성📙
public class DateUtil {
private Calendar c;
private String dateSep = "-";
private String timeSep = ":";
private final String[] day = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
public DateUtil(){
c = Calendar.getInstance();
}
}
첫 번째로 DateUtil을 생성해줍니다. 폴더 위치는 상관없지만 Util 폴더를 따로 만들어서 관리하는 것이 추후에 유지보수 측면에서 좋습니다. 어느 곳에서나 사용되어야 하기 때문에 public으로 선언하고 하위 변수는 private로 해당 클래스 내에서만 사용 가능하게 선언하였습니다.
날짜의 기본인 달력(Calendar)을 변수 c로 선언하고 dateSep과 timeSep은 날짜 표기 시 사용될 특수문자를 선언했습니다. 그리고 날짜 배열인 day는 바뀌지 않기 때문에 final로 선언해 주고 요일을 배열에 담았습니다.
그리고 기본 생성자인 DateUtil()은 'DateUtil' 클래스의 객체를 생성할 때, 자동으로 호출되며 역할은 Calendar 객체를 초기화하고 기본 설정으로 설정합니다.
간단한 기능📘
현재 연도 반환
public String getYear(){
return Integer.toString(c.get(Calendar.YEAR));
}
getYear() 함수는 Calendar를 통해 받아온 연도(상수)를 문자열로 반환하는 함수입니다.
현재 월 반환
public String getMonth(){
int mon = c.get(Calendar.MONTH)+1;
if (mon < 10) return "0"+mon;
else return Integer.toString(mon);
}
getMonth() 함수는 Calendar를 통해 받아온 월(상수)은 0부터 시작하기 때문에 +1을 하고, 받은 월이 10보다 작을시(한 글자일 경우)에는 앞에 "0"을 붙이고 문자열로 반환하는 함수입니다.
현재 날짜 반환
public String getDay(){
int date = c.get(Calendar.DATE);
if (date < 10) return "0"+date;
else return Integer.toString(date);
}
getDay() 함수는 Calendar를 통해 받아온 날짜(상수)가 10보다 작을시에는 앞에 "0"을 붙이고 문자열로 반환하는 함수입니다.
현재 시간 반환
public String getHour(){
int hour = c.get(Calendar.HOUR_OF_DAY);
if (hour < 10) return "0"+hour;
else return Integer.toString(hour);
}
getHour() 함수는 Calendar를 통해 받아온 시간(상수)이 10보다 작을시에는 앞에 "0"을 붙이고 문자열로 반환하는 함수입니다.
현재 분 반환
public String getMinute(){
int min = c.get(Calendar.MINUTE);
if (min < 10) return "0"+min;
else return Integer.toString(min);
}
getMinute() 함수는 Calendar를 통해 받아온 분(상수)이 10보다 작을시에는 앞에 "0"을 붙이고 문자열로 반환하는 함수입니다.
현재 초 반환
public String getSecond(){
int sec = c.get(Calendar.SECOND);
if (sec < 10) return "0"+sec;
else return Integer.toString(sec);
}
getSecond() 함수는 Calendar를 통해 받아온 초(상수)가 10보다 작을시에는 앞에 "0"을 붙이고 문자열로 반환하는 함수입니다.
심화 기능📒
현재 날짜 반환
public String getDate() {
return getYear() + getMonth() + getDay();
}
getDate() 함수는 이전에 선언한 getYear(), getMonth(), getDay() 함수를 활용하여 'YYYYMMDD' 형식으로 날짜를 반환하는 함수입니다.
현재 날짜 반환
public String getDates(){
return getYear() + dateSep + getMonth() + dateSep + getDay();
}
getDates() 함수는 getDate() 함수에서 이전에 선언한 dateSep('-')을 활용하여 날짜를 더 읽기 쉬운 'YYYY-MM-DD' 형식으로 반환하는 함수입니다.
현재 시간 반환
public String getTime() {
return getHour() + timeSep + getMinute() + timeSep + getSecond();
}
getTime() 함수는 현재 시간을 "HH:MM:SS" 형식으로 반환합니다. 여기서 시간, 분, 초가 10보다 작을 시에는 앞에 0이 붙습니다.
현재 날짜 및 시간 반환
public String getDateTime() {
return getDates() + " " + getTime();
}
getDateTime() 함수는 getDates() 와 getTime() 함수를 결합하여 현재 날짜와 시간을 "YYYY-MM-DD HH:MM:SS" 형식으로 반환합니다.
지정된 형식에 따라 날짜 및 시간 반환
public static String getToday(String type) {
Calendar cal = Calendar.getInstance();
cal.setTime(new java.util.Date(System.currentTimeMillis()));
return new java.text.SimpleDateFormat(type).format(cal.getTime());
}
getToday() 함수는 type 매개변수에 지정된 형식에 따라 날짜 또는 시간을 반환합니다. type이 "yyyy-MM-dd"라면 "YYYY-MM-DD" 형식으로 현재 날짜를 반환하고, type이 "HH:mm:ss"라면 "HH:MM:SS" 형식으로 현재 시간을 반환합니다.
차이 계산📗
두 날짜 사이의 일 수 계산
/**
* 두 날짜의 차이를 리턴한다.
* @param startDate yyy-MM-dd
* @param endDate yyy-MM-dd
* @return 두날짜의 차이
*/
public static int getDiffDay(String startDate , String endDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date sDate;
Date eDate;
try {
sDate = sdf.parse(startDate);
eDate = sdf.parse(endDate);
return (int)((eDate.getTime() - sDate.getTime()) / 1000 / 60 / 60 / 24);
}catch(Exception e) {
return 0;
}
}
getDiffDay() 함수는 시작 날짜와 종료 날짜를 각각 startDate, endDate 매개변수로 받아 두 날짜 간의 차이를 계산합니다. 날짜 문자열을 SimpleDateFormat을 사용하여 Date 객체로 반환한 뒤, 밀리초 단위로 계산 후 '일자'로 반환하기 위해 '1000 / 60 / 60/ 24' 계산을 합니다.
두 날짜 및 시간의 초 차이 계산
public static long diffOfSeconds(String begin, String end) throws Exception {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date beginDate = formatter.parse(begin);
Date endDate = formatter.parse(end);
return (endDate.getTime() - beginDate.getTime()) / 1000;
}
diffOfSeconds() 함수는 시작 일시와 종료 일시를 "yyyy-MM-dd HH:mm:ss" 형식의 매개변수로 받아 초 차이를 계산합니다. 마찬가지로 SimpleDateFormat을 이용하여 Date 객체로 반환 뒤, 각각 getTime()을 이용하여 밀리초 값으로 반환 후 차이를 계산합니다. 이후에 초 단위로 리턴하기 위해 1000으로 나누는 작업을 진행합니다.
마치며
지금까지 간단한 Date 함수들을 살펴봤습니다. 다음에는 더 유용한 정보들로 포스팅할게요 :)
👨👩👦👦 오픈채팅방 운영
취업을 준비하는 예비 개발자분들을 위한 질문&답변할 수 있는 공간을 만들었습니다. 취업과 이직을 하기 위해서 어떤 걸 중점적으로 준비해야 하는지부터 포트폴리오&이력서 작성법 등 다양한 질문들을 받고 답변을 드립니다. 참여하셔서 다양한 정보 얻고 가시면 좋을 것 같네요😁
참여코드 : 456456
'TIL' 카테고리의 다른 글
E2E(End-to-End) 테스트 요약 정리 (0) | 2024.04.11 |
---|---|
Unit(단위 테스트)와 Integration(통합 테스트) 정리 및 예시 (0) | 2024.04.03 |
jstree 핸들링 방법(대용량 데이터 다루기 - 행걸리는 현상) (0) | 2024.03.07 |
jstree 핸들링 방법(상˙하위 노드 입맛대로 선택하기) (0) | 2024.02.23 |
Java 대용량 데이터 HashSet 기본개념 및 사용법(예시) (2) | 2024.02.08 |