Programming/JAVA

[Java 자바] 현재 날짜와 시간 알아내기, 원하는 형식으로 출력하기 (Date, SimpleDateFormat 클래스)

꼬ㄴi 2023. 8. 12. 02:59

[ java.util.Date]

java.util 패키지에 있는 클래스로 날짜와 시간을 다룬다.

Date의 대부분의 메서드가 현재는 deprecated 되어 사용되지 않고 있지만,

날짜와 시간을 자바로 처리하다 보면, Date 클래스를 써야하는 경우가 종종 있다.

 

간단한 사용법은 정리하고 넘어가는 게 좋을 것 같다.


 현재 날짜와 시간 

import java.util.Date;

Date now = new Date();		//Fri Aug 11 23:37:59 KST 2023

Date 객체를 생성하면 현재 날짜/시간/요일 등의 데이터가 저장된다. 

KST는 간단히 말하면 한국 표준시를 의미한다. 아래 SimpleDateFormat 설명에 나온다.

 

 출력 

System.out.println(date.toString());

' Fri Aug 11  23:37:59 KST 2023 ' 이 출력된다.

toString(  ) 메서드는 생략해도 된다.


 날짜와 시간 설정하기 

// '년/월/일 시:분:초' 형태의 문자열로 지정
1. Date date = new Date("2022/11/10 12:11:10");	

// long타입의 밀리초값으로 지정
2. Date date = new Date(1624578000000L);

1 출력값 👉 Thu Nov 10 12:10:11 KST 2022

2 출력값 👉 Fri Jun 25 08:40:00 KST 2021

 

long 타입의 데이터를 넣어서 날짜를 지정할 경우,

1970년 1월 1일 0시 0분 0초를 시작점으로 long타입의 데이터를 밀리초로 환산해서 날짜를 계산한다.


[ java.text.SimpleDateFormat]

날짜와 시간의 형식을 지정할 때 사용되는 클래스

Date만으로는 원하는 형식으로 날짜와 시간을 다양하게 출력하기 어렵다.

그래서 Date 클래스로 시간 데이터를 다룰 때 SimpleDateFormat 가 같이 사용된다.

사용법을 그래서 같이 정리함😁

 

 날짜 패턴 작성하는 법 

import java.text.SimpleDateFormat;

SimpleDateFormat fmt = new SimpleDateFormat("지정할 날짜 형식");


// 년-y  월-M  일-d  요일-E  오전/오후-a  시-H  분-m  초-s  TimeZone-z
1. SimpleDateFormat fmt = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 a HH:mm:ss z");
2. SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

위처럼 SimpleDateFormat 생성자 안에 문자열 형태로 원하는 출력패턴을 넣어준다.

 

기호 z가 의미하는 TimeZone(타임존)은 동일한 로컬 시간을 쓰는 지역을 말한다.국가마다 타임존이 다른데, 우리나라 타임존은 KST(Korea Standard Time) 라고 한다.


 날짜 객체 형식화하기 

   1) String 타입으로 형식화하기

Date date = new Date("2022/11/10 12:11:10");

String DateStr = fmt.format(date);		//format메서드가 date객체의 날짜를 문자열로 형식화함

위에서 예시로 든 패턴으로 포맷팅 해보면,

👉 2022년 11월 10일 목요일 오후 12:10:11 KST

👉" 2022-11-10 12:10:11 "

 

 2) Date 타입으로 형식화하기

SimpleDateFormat fmt = new SimpleDateFormat("yyyy년 MM월 dd일 E a HH:mm:ss z");

try {
    Date toto = fmt.parse("2023년 10월 10일 화요일 오전 11:11:11 KST");
    System.out.println(toto);
} catch (Exception e) {
    e.printStackTrace(); // ParseException 발생
}

출력 👉 Tue Oct 10 11:11:11 KST 2023

 

fmt 객체 생성시 설정한 형식패턴에 맞게

날짜/시간/요일/타임존 의 값을 넣어준다.

형식이 맞지 않을 경우 ParseException 이라는 예외가 발생한다.

 

근데 이 방식은 잘 사용하지 않을 것 같다. 뭔가 일을 두 번 반복하는 느낌이라서 . .