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
'Java' 카테고리의 다른 글
[JAVA] Java Stream (스트림) API (0) | 2020.12.31 |
---|---|
[JAVA] Java8 함수형 인터페이스 (Functional Interface) (0) | 2020.12.24 |
[JAVA] Java8 Lambda Expressions ( 람다식, 람다 표현식 ) (0) | 2020.12.23 |
[JAVA] Java GC ( Garbage Collection ) (0) | 2020.11.26 |
[JAVA] JVM Execution Engine (실행엔진) (0) | 2020.11.25 |