Java (자바)

[Java] 날짜 데이터를 시스템 시간으로 포맷하기 / 날짜 더하기 · 빼기

Oscar:) 2024. 2. 3. 17:23

 

 

이전 포스팅에서 시스템 시간을 구해 날짜 데이터로 포맷하는 방법을 알아보았다.

 

 

[Java] 현재 날짜, 시간 구하기 / Date / Calendar / System 클래스 맛보기

자바에서 현재 날짜 및 시간을 구하는 대표적인 방법은 3가지가 있다. ● Date 클래스 ● Calendar 클래스 ● System 클래스 사용하는 문법은 다음과 같다. // SimpleDateFormat 클래스 : 원하는 형식으로 포

oscarstory.tistory.com

 

 


 

 

 

개발을 하다보니, 반대로 포맷해야 할 상황을 맞이하여 공부하게 되었다.

날짜 데이터를 시스템 시간으로 포맷하는 방법을 알아보자.

 

 

 


 

복습) 시스템 시간으로 현재 날짜 구하기

 

위에서 링크 남긴 포스팅에서 진행했던 예제이지만,

오늘 해볼 작업을 위해 간단하게 복습해보자.

 

// SimpleDateFormat 객체 초기화
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy년 MM월 dd일");

// 현재 시스템 시간 초기화
long currentTime = System.currentTimeMillis();

// SimpleDateFormat 객체로 현재 시간 포맷
String date = simpleDateFormat.format(currentTime);

// 출력
System.out.println(date);

 

코드의 각 줄마다 주석을 작성했으니 확인하기 바란다.

 

결과)

 

 

 


 

임의 날짜(String 데이터)를 시스템 시간으로 포맷

 

이번 포스팅의 목적인 내용이다.

 

String 데이터라서 어떤 형식의 날짜도 담겨있을 수 있다.

다음과 같은 형식의 날짜로 테스트해 보겠다.

 

① 2024년 02월 02일

② 2024 / 02 / 02

 

 

똑같은 형식의 문법 테스트이다 보니,

변수명을 번호로 구분하는 점 이해하기 바란다.

 

// 1. 포맷할 날짜
String dateString1 = "2024년 02월 02일";
String dateString2 = "2024 / 02 / 02";

// 2. SimpleDateFormat 객체 초기화
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy년 MM월 dd일");
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy / MM / dd");

try {

    // 3. 날짜를 Date 클래스로 포맷
    Date date1 = simpleDateFormat1.parse(dateString1);
    Date date2 = simpleDateFormat2.parse(dateString2);

    // 4. Date 클래스에서 밀리초 단위로 시간을 얻어옴
    long parseDate1 = date1.getTime();
    long parseDate2 = date2.getTime();

    // 5. 출력
    System.out.println("포맷한 시간1 : " + parseDate1);
    System.out.println("포맷한 시간2 : " + parseDate2);
    System.out.println("현재 시간 : " + System.currentTimeMillis());

} catch (ParseException e) {
    throw new RuntimeException(e);
}

 

 

주석의 번호에 맞게 간단하게 설명해본다.

 

 

1. 임의의 날짜를 String 변수에 초기화한다.


2. 해당 String에 알맞게 포맷 타입을 지정해서 SimpleDateFormat 객체를 초기화한다.


3. SimpleDateFormat 클래스의 parse() 메서드로 Date 클래스 객체에 초기화한다.

해당 메서드를 사용하려면 ParseException을 throw하는 try/catch문을 작성해줘야 한다.


4. Date 클래스의 getTime() 메서드로 밀리초 단위의 시간을 얻어온다.


5. 포맷한 시간과 현재 시스템 시간을 출력하여 비교해보자.

 

 

결과)

 

포맷한 시간1과 2가 동일하게 잘 포맷되었다.

 

 

포맷 타입에 시간은 넣지 않았으므로,

2024년 2월 2일 00시의 시간으로 포맷되었다.

 

이 포스팅의 작성 시간은 2024년 2월 2일 밤 10시 47분쯤 된다.

 

현재 시간에서 포맷한 시간을 빼면 82,079,027 밀리초고,

시간 단위인 3,600,000을 나누면 22.79가 나오는데

대략 22시간 4~50분쯤 나온다.

 

 

정확한 포맷에 성공했다고 볼 수 있다.

 

 

 


 

임의 날짜에 특정 날짜 더하기 · 빼기

 

 

캘린더를 직접 구현하다가, 이 부분에서 벽을 느꼈다.

항상 현재 날짜·시간만 다뤄보다가,
현재 날짜·시간이 아닌 다른 날짜·시간을 다뤄야했다.

대충 '2024-02-02' 날짜로 가정하고,
'-' 기호로 split() 해서 해당 년/월/일에 +1 or -1 해주는 방식을 생각했었다.

하지만 위 방법으로는 12월에서 1월로 넘어갈 때 년도가 올라가고,
월마다 말일의 날짜가 제각기 다른 점 등
번거로운 예외처리가 정말 많이 필요하여 포기했다.

 

 

하지만 위에서 진행했던 포맷으로 해결할 수 있었다.

 

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy년 MM월 dd일");

String today = "2024년 02월 02일";
String tomorrow = "";
Calendar calendar = Calendar.getInstance();
Date date;

try {
    date = simpleDateFormat.parse(today);
} catch (ParseException e) {
    throw new RuntimeException(e);
}

// Calendar 객체에 Date 세팅 후 날짜 1일 더하기
calendar.setTime(date);
calendar.add(Calendar.DATE, 1);

tomorrow = simpleDateFormat.format(calendar.getTime());

System.out.println("오늘 날짜 : " + today);
System.out.println("내일 날짜 : " + tomorrow);

 

다른 부분은 위에서 진행했던 내용과 동일하고,

Calendar 클래스를 사용한 부분만 보면 된다.

 

Date 클래스로 포맷한 날짜를 Calendar 객체에 세팅하고,

add() 메서드로 1일을 더해주었다.

 

 

결과)

 

날짜를 1일 더해서 다시 String으로 포맷하는데 성공했다.

 

 


 

Calendar.add() 메서드의 인수만 바꿔주면

년,월,일 모두 원하는 날짜로 지정할 수 있다.

 

 

● Calendar.add(Calendar.MONTH, 1);

 

 

  Calendar.add(Calendar.YEAR, 1);

 

 

날짜 빼기는 두 번째 인수에 음수를 넣어주면 된다.

 

 


 

 

 

이번 포스팅에서는 (날짜 <-> 시스템 시간) 포맷과

이를 응용하여 날짜 더하기를 해 보았다.

 

날짜 데이터 다루기가 은근 쉬우면서도 까다롭다.