[JDK8] Date, Calendar, LocaDateTime 날자 관련 객체들 사용법

2015. 6. 9. 14:00·java

 

Date, Calendar

자바에서는 날짜 관련 처리를 지원하기 위해서 Date, Calendar 객체를 제공한다.

Date는 JDK 1.0, Calendar는 JDK 1.1 버전에서 지원되었다.

 

Date 가 좀더 간단하고, 이전 버전과의 호환성을 위해 계속 제공하고 있다.

Calendar는 Date 객체의 추상화 버전이라고 할 수 있고, Calendar객체를 이용하는 것을 권장한다.

특정 날짜를 지정하거나, 날짜 연산을 할 경우 Calendar를 사용한다. 또한 Calendar를 사용하여 지역화 처리를 할 수 있다.


* JDK8 이전의 Date 객체에는 몇가지 문제점이 존재한다. (http://d2.naver.com/helloworld/645609)

  - 불변 객체가 아니기 때문에 스레드에서 문제가 발생할 수 있다. 


LocalTime, LocalDate, LocalDateTime

JDK8 부터 제공되는 LocalTime, LocalDate, LocalDateTime 객체는

기존의 Date, Calendar 객체의 부족한 점을 보완하기 위해 신규로 생성된 객체이다.

 

l  Calendar의 Month 는 0부터 시작함(0이 1월)

l  Date 객체는 불변객체가 아님: 스레드에 안전하지 않음

 

이러한 문제점들로 인하여 Joda-Time, 아파치의 common의 FastDateTime 등의 라이브러리를 사용하였는데

이를 보완하기 위해 신규 객체로 제공되었다.

 

사용법은 Joda-Time 과 유사하다.

 

of() 메소드로 날짜를 설정하고, ofPattern() 메소드로 날짜를 출력할 패턴을 생성한다.

plus..(), minus..() 메소드로 날짜를 수정할 수 있다.

 

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

public class DateCalendarExample {

    public void exampleDate() {

        Date now = new Date();
        System.out.println(now);
        
        // 포맷 출력
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(now));
    }

    public void exampleCalendar() {

        // Calendar 객체 생성
        Calendar calendar = Calendar.getInstance();
        
        // 현재 일자
        Date now = calendar.getTime();
        System.out.println(now);
        
        // 포맷 출력
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(now));
        
        // 날짜 설정(달이 0부터 시작함)
        calendar.set(2014, 1, 2, 3, 4, 5);
        System.out.println("Year : " + calendar.get(Calendar.YEAR));
        System.out.println("Year : " + calendar.get(Calendar.MONTH));
        System.out.println("Year : " + calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println("Year : " + calendar.get(Calendar.HOUR_OF_DAY));
        System.out.println("Year : " + calendar.get(Calendar.MINUTE));
        System.out.println("Year : " + calendar.get(Calendar.SECOND));
        System.out.println(sdf.format(calendar.getTime()));
        
        try {
            // 문자열을 일자형으로 파싱
            Date time = sdf.parse("2001-05-09 13:45:30");
            System.out.println(sdf.format(time));
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
    
    public void exampleLocalDateTime() {
        
        // 현재 시간
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        
        // 날짜 설정
        LocalDateTime time = LocalDateTime.of(LocalDate.now(), LocalTime.now());
        System.out.println(time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        
        // 날짜 설정
        LocalDateTime time2 = LocalDateTime.of(2014, 1, 2, 3, 4, 5);
        System.out.println(time2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        
        // 파싱
        LocalDateTime time3 = LocalDateTime.parse("2001-05-09 13:45:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        System.out.println(time3.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        
        // 일자 추가
        LocalDateTime time4 = LocalDateTime.now().plusDays(3);
        System.out.println(time4.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
    }

    public static void main(String[] args) {
        DateCalendarExample example = new DateCalendarExample();
        example.exampleDate();
        System.out.println("--------------------------");
        example.exampleCalendar();
        System.out.println("--------------------------");
        example.exampleLocalDateTime();
    }
}


반응형
저작자표시 비영리 (새창열림)

'java' 카테고리의 다른 글

[Math] 좌표계의 x, y를 이용한 각도 구하기  (0) 2016.05.19
[개념] 스택(stack)과 힙(heap)  (0) 2016.02.16
[어노테이션] 어노테이션과 리플렉션을 이용한 메소드 실행시간 출력하기  (0) 2015.06.04
[알고리즘] 퀵정렬  (0) 2015.06.01
MSSQL 에서 Oracle 에 있는 테이블로 정보를 insert 프로그램  (0) 2013.02.05
'java' 카테고리의 다른 글
  • [Math] 좌표계의 x, y를 이용한 각도 구하기
  • [개념] 스택(stack)과 힙(heap)
  • [어노테이션] 어노테이션과 리플렉션을 이용한 메소드 실행시간 출력하기
  • [알고리즘] 퀵정렬
hs_seo
hs_seo
Hello World!
    반응형
  • hs_seo
    개발자로 살아남기
    hs_seo
  • 전체
    오늘
    어제
    • 전체 (1140)
      • 개발자 (21)
        • 개발에 유의할 점 (0)
        • 면접 (5)
      • IT 소식 (5)
        • 업계 (1)
      • java (51)
        • 디자인패턴 (3)
        • apache-common (1)
      • 개념 (47)
        • 자료구조 (4)
        • 함수형사고 (8)
        • 디자인패턴 (1)
      • 데이터분석 (1)
      • python (67)
        • 코드조각 (12)
        • 라이브러리 (2)
      • 빅데이터 (418)
        • zookeeper (5)
        • hadoop (78)
        • hdfs (12)
        • hive (127)
        • hbase (16)
        • spark (40)
        • scala (4)
        • trino (3)
        • oozie (41)
        • Hue (9)
        • R (5)
        • sqoop (6)
        • flume (3)
        • elasticsearch (2)
        • airflow (16)
        • kafka (3)
        • kubernetes (10)
        • openstack (3)
        • flink (2)
        • redis (2)
      • 빅데이터 강좌 (2)
      • 알고리즘 (131)
        • 알고리즘 (1)
        • 백준 (61)
        • 정올 (41)
        • 더블릿 (5)
        • 프로그래머스 (1)
      • 프로그래밍 언어 (30)
        • go (4)
        • js (9)
        • .Net (6)
        • Jsp (1)
        • ansible (3)
        • terraform (6)
      • Tools (56)
        • docker (2)
        • macbook (6)
        • maven (3)
        • sublime (1)
      • 프레임워크 (25)
        • [JS] angularjs (2)
        • [JS] node.js (19)
        • [Java] spring (2)
        • Android (2)
      • 데이타베이스 (43)
        • SQLD (5)
        • Oracle (1)
        • MySQL (8)
        • ADsP (2)
      • 리눅스 (25)
        • Bash (61)
      • GCP (5)
      • AWS (34)
        • EC2 (2)
        • EMR (14)
      • 정보보안기사 (4)
        • 네트워크 (1)
      • 개인 (80)
        • 업무실수 (0)
        • 책 (9)
        • 교육 (3)
        • 여행 (17)
        • 영화 (12)
        • 음악 (2)
        • 피규어 (4)
        • 게임 (3)
        • 생각 (7)
        • 기타 (10)
        • 좋은글 (5)
        • 좋은 사이트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 빅데이터-하둡,하이브로 시작하기
    • 빅데이터-스칼라, 스파크로 시작하기
    • Kaggle에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

    oozie
    다이나믹
    하둡
    emr
    Python
    Tez
    HDFS
    hbase
    ubuntu
    S3
    bash
    AWS
    알고리즘
    파이썬
    yarn
    java
    HIVE
    error
    Linux
    백준
    mysql
    Hadoop
    nodejs
    오류
    정올
    k8s
    airflow
    build
    하이브
    SPARK
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[JDK8] Date, Calendar, LocaDateTime 날자 관련 객체들 사용법
상단으로

티스토리툴바