복잡한뇌구조마냥

[JAVA] 날짜와 시간 ( Date, Calendar, java.time ) 본문

BE/JAVA

[JAVA] 날짜와 시간 ( Date, Calendar, java.time )

지금해냥 2025. 6. 14. 20:03

Date 클래스

- JDK 1.0때 만들어짐

- 지역화에 대한 부분이 고려되지 않음

- 대부분 생성자와 메소드가 Deprecated 되어있음

import java.text.SimpleDateFormat;
import java.util.Date;

public class CalendarExam {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(date);

        SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd 'at' hh:mm:ss a zzz");
        String dateString = ft.format(date);
        System.out.println(dateString);

        System.out.println(date.getTime());
        long today = System.currentTimeMillis();
        System.out.println(today);
    }
}

- 기본 생성자를 이용해서 Date 클래스를 생성하는 방식으로 사용

- SimpleDateFormat을 이용해서 Date가 출력하는 문자열 형태 변경

- getTime 메소드를 이용해서 타임스탬프를 출력할 수 있음.

- System에서도  currentTimeMillis 메소드를 이용해서 현재시간을 출력할 수 있음.

 

Format 문자별 패턴

문자 날짜 및 시간 요소  표시 예제
G Era designator Text AD
y Year Year 1996; 96
Y Week year Year 2009; 09
M Month in year (context sensitive) Month July; Jul; 07
L Month in year (standalone form) Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day name in week Text Tuesday; Tue
u Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00

 

예제 패턴

날짜 및 시간 패턴 결과
"yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
"EEE, MMM d, ''yy" Wed, Jul 4, '01
"h:mm a" 12:08 PM
"hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
"K:mm a, z" 0:08 PM, PDT
"yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX" 2001-07-04T12:08:56.235-07:00
"YYYY-'W'ww-u" 2001-W27-3

 

Calendar 클래스

- Date 클래스의 단점인 지역화를 해결하고 등장.

- JDK 1.1때 만들어짐

- 추상클래스임

- 인스턴스 생성시 클래스 메소드 getInstance()를 사용해야하고, 내부적으로 java.util.GregorianCalendar 인스턴스를 생성 리턴

- GregorianCalendar는 Calendar의 자식 클래스임.

- 새로운 형식의 표준달력이 생길 수도 있는 것을 자바가 고려해서 만듬.

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalendarExam {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.println("Year : "+cal.get(Calendar.YEAR));
        // Month는 +1을 해줘야 현재 월을 표시함.
        System.out.println("Month : "+cal.get(Calendar.MONTH));
        System.out.println("Date : "+cal.get(Calendar.DATE));
        // 24시 기준
        System.out.println("Hour 24 : "+cal.get(Calendar.HOUR_OF_DAY));
        // 오전 오후 기준
        System.out.println("Hour 12 : "+cal.get(Calendar.HOUR));
        System.out.println("Minute : "+cal.get(Calendar.MINUTE));
        System.out.println("Second : "+cal.get(Calendar.SECOND));
        System.out.println("Millisecond : "+cal.get(Calendar.MILLISECOND));

        cal.add(Calendar.DATE, 10);
        System.out.println("Date : "+cal.get(Calendar.DATE));

        String dateString = String.format("%d년%d월%d일", cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DATE));
        System.out.println(dateString);
    }
}

- add 메소드를 통해서 원하는 시간을 만들어서 사용할 수 있음.

 

java.time 패키지

- java.util.Date가 직관적이지 못함.

- Joda-Time같은 라이브러리로 Date나 Time을 대신할 수 있는 클래스를 사용하기도 함.

- Java SE 8 부터 새롭게 디자인한 Date, Time API  제공

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.Month;

public class TimeExam {
    public static void main(String[] args) {
        LocalDateTime timePoint = LocalDateTime.now();
        System.out.println(timePoint);

        LocalDate ld1= LocalDate.of(2002, Month.DECEMBER, 22);
        System.out.println(ld1);
        LocalDate ld2= LocalDate.of(2002, 12, 22);
        System.out.println(ld2);

        LocalTime lt1 = LocalTime.of(17, 18, 30);
        System.out.println(lt1);
        LocalTime lt2 = LocalTime.parse("10:15:30");
        System.out.println(lt2);

        LocalDate ld3 = timePoint.toLocalDate();
        System.out.println(ld3);
        System.out.println(timePoint.getMonthValue());
        Month month = timePoint.getMonth();
        System.out.println(month);
        System.out.println(month.getValue());
    }
}

- Month에 +1을 해주지 않아도 직관적으로 사용할 수 있음.

- getter 메소드를 이용해서 시간정보를 사용하는게 직관적임

 

참고자료:

https://junghn.tistory.com/entry/JAVA-자바-날짜-포맷-변경-방법SimpleDateFormat-yyyyMMdd 

 

 

[JAVA] 자바 날짜 포맷 변경 방법(SimpleDateFormat) yyyyMMdd

Date클래스를 이용하여 현재 날짜를 출력하면 영문으로 된 날짜를 리턴한다. 특정 문자열 포맷으로 얻고 싶으면 java.text.SimpleDateFormat 클래스를 이용하면 된다. 다음은 오늘 날짜를 yyyy 년 MM월 dd일

junghn.tistory.com

 

LIST