SMALL

Java에서는 Date 표현에 해당하는 다양한 Class들을 제공한다.

대표적으로는 java.util.Date Class와 java.time.LocalDateTime Class가 있을 수 있다.

 

각각의 Class에 특징에 대해서 살펴보고, 정리해 보도록 하자

 

java.util.Date 클래스는 JDK 1.1 버전부터 지원하는 클래스였지만 다양한 문제가 제기되면서, 많은 기능들이 deprecated 되었다. 

java.util.Date 클래스의 문제점을 간단히 정리해 보면 아래와 같다 

  • 불변 객체가 아니다
  • int 상수 필드의 남용
  • 헷갈리는 월지정 및 일관성 없는 요일 상수

이 중 가장 불편한 점은 Mutable 객체라는 점이다. Date의 값이 변경되면 멀티 스레드 환경에서 불안정성 등의 부작용이 나타날 수 있게 된다. C#, Python 같은 언어에서는 날짜 클래스가 한번 생성된 이후에는 내부 속성을 바꿀 수 없다.

 

실제 Date 클래스를 사용하는 코드를 살펴보자

Date date_now = new Date(System.currentTimeMillis()); // 현재시간을 가져와 Date형으로 저장한다
System.out.println(date_now); // 기본 포멧으로 출력한다
		
SimpleDateFormat fourteen_format = new SimpleDateFormat("yyyyMMddHHmmss"); 
String str_source = fourteen_format.format(date_now); // 14자리 포멧으로 출력한다
System.out.println(str_source); 
		
SimpleDateFormat input_format    = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 입력포멧
Date date_parsed = fourteen_format.parse(str_source); // 문자열을 파싱해 Date형으로 저장한다
String str_parsed = input_format.format(date_parsed);
System.out.println(str_parsed);

 

JDK 1.8버전에서 java.time 패키지에 LocalDateTime과 타임존 개념까지 포함할 수 있는 ZonedDateTime이 추가되었다. 이 패키지에서 제공하는 모든 class들은 immutable 하기 때문에 thread-safe 하게 사용 가능하다.

 

실제 LocalDateTime 클래스를 사용하는 코드를 살펴보자

LocalDateTime nowDateTime = LocalDateTime.now();
// 2018년 12월 11일 15시 23분 32초, 2018-12-11T15:23:32
LocalDateTime ofDateTime = LocalDateTime.of(2018, 12, 11, 15, 23, 32);
System.out.println(ofDateTime);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
String formatted = formatter.format(ofDateTime);
formatted = ofDateTime.format(formatter);
LocalDateTime parsedDate = LocalDateTime.parse(formatted, formatter);

 

LIST

+ Recent posts