Java로 시스템 일시의 시간을 취급하는 클래스에는, 「Date」 클래스와 「Calendar」 클래스,
나아가 Java8로 새롭게 추가된 「java.time」 패키지로서 추가된 클래스 군의 3개로 분류되어합니다.
「Date」 「Calendar」 「LocalDateTime」 클래스의 각각으로, 시스템 일자를 취득하는 방법
Date 클래스에서 취득
Date 클래스의 경우, 인수가 없는 생성자로 Date 클래스를 작성하면 현재 시간을 저장하는 인스턴스를 얻을 수 있습니다.
Date now = new Date();
Calendar 클래스에서 취득
Calendar 클래스로 시스템 일자를 취득하는 경우는, Calendar.getInstance 메소드를 사용합니다. 반환 값은 현재 시간을 저장하는 Calendar 클래스의 인스턴스를 반환합니다.
Calendar cal = Calendar.getInstance();
LocalDateTime으로 가져오기
LocalDateTime 클래스는, Java8로 「java.time」 패키지에 추가된 새로운 클래스입니다.
LocalDateTime 클래스로 시스템 일자를 취득하는 경우는, 전용의 메서드인 사용합니다.
LocalDateTime now = LocalDateTime.now();
NOTE
LocalDateTime 클래스는 이름대로 로컬 시간을 관리하는 클래스입니다. 타임 존이나 시차 등의 정보도 표현하고 싶은 경우는, 같은 「java.time」 패키지에 존재하는 ZonedDateTime 클래스나, OffsetDateTime 를 사용합니다.
Date 클래스는 비추천?
Java의Date 클래스는, Java 가 등장했을 무렵부터 존재하는 가장 역사가 긴 클래스입니다.
그 후, Calendar 클래스나 java.time 패키지가 추가되어 Java8 에서는 다음 표와 같이 Date 클래스의 많은 메서드가 비추천이 되어, 장래적으로는 메소드 자체가 삭제되어 사용할 수 없게 되는 것이 예정되고 있습니다.
<비추천의 메서드>int), setMinutes(int), setMonth(int), setSeconds(int seconds), setYear(int), toGMTString(), toLocaleString(), UTC(int year, int month, int date, int hrs, int min, int sec)
<아직 사용할 수 있는 메서드>
after(Date), before(Date), clone(), compareTo(Date), equals(Object), getTime(), setTime(long)
이와 같이, 일자를 취득·조작하기 위한 메서드의 대부분이 비추천이 되고 있는 상황에서, Date 클래스 자체가 비추천이라고 말해도 좋은 상황으로, 공식의 JavaDoc에서도 다음과 같이 말해져 있습니다.
JDK 1.1부터는 날짜와 시간 필드 사이의 변환에는 Calendar 클래스를, 날짜 문자열의 형식과 구문 분석에는 DateFormat 클래스를 각각 사용해야 합니다. 해당 메서드는 더 이상 사용되지 않습니다.
날짜를 문자열로 포맷
Calendar 나 LocalDateTime 의 클래스를 서식 지정해 캐릭터 라인으로 하는 경우는 「SimpleDateFormat」 또는 「DateTimeFormatter」 클래스를 사용합니다.
SimpleDateFormat
먼저 SimpleDateFormat 클래스에서 Calendar 인스턴스를 서식 지정하여 문자열로 만드는 방법을 살펴보겠습니다.
import java.util.Calendar;
import java.text.SimpleDateFormat;
class Main {
public static void main(String[] args) {
//현재시각으로 캘린더의 인스턴스를 취득
Calendar cal = Calendar.getInstance();
//SimpleDateFormat에 서식을 지정
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
//Calendar의 일시를SimpleDateFormat으로 지정한 서식으로 문자열을 변환
System.out.println(sdf.format(cal.getTime()));
}
}
이와 같이, SimpleDateFormat 의 constructor으로 일자를 캐릭터 라인에 포맷할 때의 서식을 지정해, SimpleDateFormat#format 메소드로 실제로 일자의 인스턴스를 캐릭터 라인으로 변환합니다.
DateTimeFormatter
다른 포맷 하는 클래스로서, Java8로 추가된 DateTimeFormatter 클래스가 있습니다. 이쪽은 thread 세이프인 클래스이며, 퍼포먼스에도 뛰어나기 때문에, Java8 이후의 버전을 사용해 개발을 실시하고 있는 경우는, 기본적으로는 이쪽의 클래스를 사용하는 것이 좋습니다.
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
class Main {
public static void main(String[] args) throws DateTimeParseException {
// 서식을 지정해서DateTimeFormatter을 취득
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
// 서식을 지정해서LocalDateTime의 인스턴스를 작성
LocalDateTime dt = LocalDateTime.now();
// 시스템일시를、DateTimeFormatter으로 지정한 포맷으로 문자열 변환
String str = LocalDateTime.now().format(dtf);
System.out.println(str);
}
}
'개발 > JAVA' 카테고리의 다른 글
Javadoc의 의미와 쓰는 방법 주석 다는 방법 (4) | 2022.12.12 |
---|---|
Java hashmap과 map의 차이 (14) | 2022.12.05 |
Java HashMap 사용법 (2) | 2022.12.05 |
java 래퍼 클래스 사용 wrapper class (0) | 2022.12.05 |
JDBC 기초 (PreparedStatement, Driver Manager, Connection) (0) | 2022.11.22 |
댓글