[JAVA] 날짜와 시간, 형식화

2024. 9. 2. 19:15·Back-End/Java
목차
  1. 날짜와 시간
  2. Calendar 클래스
  3. Calendar에 정의된 필드
  4. 형식화 클래스
  5. DecimalFormat
  6. SimpleDateFormat

[작성일: 2023. 02. 06]

 

날짜와 시간

java.util.Date 
- 날짜와 시간을 다룰 목적으로 만들어진 클래스
- Date의 메서드는 거의 deprecated 되었지만, 여전히 쓰이고 있음.

java.util.Calendar
- Date 클래스를 개선한 새로운 클래스
- 여전히 단점 존재
 
java.time 패키지
- Date와 Calendar의 단점을 개선한 새로운 클래스들 제공
// 1. Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
  ...
Date d = new Date(cal.getTimeInMillis());


// 2. Date를 Calendar로 변환
Date d = new Date();
  ...
Calendar cal = Calendar.getInstance();
cal.setTime(d)​

 

 

 

 

 

Calendar 클래스

  • 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 함.
  • get()으로 날짜와 시간 필드 가져오기 - int get(int field)
Calendar cal = new Calendar(); // 에러! 추상클래스는 인스턴스 생성 불가능
Calendar cal = Calendar.getInstance(); // OK
// 현재 날짜와 시간으로 세팅됨.
int thisYear = cal.get(Calendar.YEAR); // 몇 년인지 알아내기
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); // 이 달의 마지막 날

 

 

 

Calendar에 정의된 필드

필드명 설명
YEAR 년
MONTH 월 (0부터 시작)
WEEK_OF_YEAR 1월 1일부터 몇 번째 주
WEEK_OF_MONTH 그 달의 몇 번째 주
DATE 일
DAY_OF_MONTH 그 달의 몇 번째 일
DAY_OF_YEAR 그 해의 몇 번째 일
DAY_OF_WEEK 요일
DAY_OF_WEEK_IN_MONTH 그 달의 몇 번째 요일
HOUR 시간(0~11)
HOUR_OF_DAY 시간(0~23)
MINUTE 분
SECOND 초
MILLISECOND 천분의 일초
ZONE_OFFSET GMT 기준 시차(천분의 일초 단위)
AM_PM 오전/오후

 

 

  • set()으로 날짜와 시간 지정하기
void set(int field, int value)
void set(int year, int month, int dated)
void set(int year, int month, int dated, int hourOfDay, int minute)
void set(int year, int month, int dated, int hourOfDay, int minute, int second)

 

  • 날짜 지정하는 방법. (월(MONTH)이 0부터 시작한다는 것 주의)
Calendar date1 = Calendar.getInstance();
date1.set(2023,1,6); // 3월 아님
// date1.set(Calendar.YEAR, 2023);
// date1.set(Calendar.MONTH, 1);
// date1.set(Calendar.DATE, 6);

 

  • 시간 지정하는 방법
Calendar itme1 = Calendar.getInstance();
time1.set(Calendar.HOUR_OF_DAY, 10);
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 30);
// time1을 10시 20분 30초로 설정

 

  • clear()는 Claendar 객체의 모든 필드를 초기화
Calendar dt = Calendar.getInstance();
System.out.println(new Date(dt.getTimeInMillis()));
dt.clear(); // 모든 필드 초기화
System.out.println(new Date(dt.getTimeInMillis()));

 

  • clear(int field)는 Calendar 객체의 특정 필드를 초기화
Calendar dt = Calendar.getInstance();
System.out.println(new Date(dt.getTimeInMillis()));
dt.clear(Calendar.SECOND);
dt.clear(Calendar.MNINUTE);
dt.clear(Calendar.HOUR_OF_DAY);
dt.clear(Calendar.HOUR);
System.out.println(new Date(dt.getTimeInMillis()));

 

  • add()는 특정 필드의 값을 증가 또는 감소(다른 필드에 영향 O)
Calendar date = Calendar.getInstance();
date.clear(); // 모든 필드를 초기화
date.set(2023, 1, 6);
date.add(Calendar, DATE, 1); // 날짜에 1을 더함
date.add(Calendar, MONTH, -1); // 월에서 1을 뺌

 

  • roll()은 특정 필드의 값을 증가 또는 감소(다른 필드에 영향 X)
date.set(2023, 1, 6);
// 23년 2월 6일로 설정
// add()와 달리 roll()은 다른 필드에 영향을 미치지 않음. 일이 넘어가도 월이 바뀌지 않음
date.roll(Calendar.DATE, 1); // 날짜에 1을 더함.
date.roll(Calendar.MONTH, -8); // 월에서 8을 뺌.

 

 

 

 

 

형식화 클래스

  • java.text 패키지의 DecimalFormat, SimpleDateFormat
  • 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자, 날짜 ➡️ 형식 문자열)
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number);
// result = "1.2E6"

 

  • 형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식 문자열 ➡️ 숫자, 날짜)
DecimalFormat df = new DecimalFormat("#,###.##");
Number num = df.parse("1,234,567.89);
double d = num.doubleValue(); // 1234567.89

 

 

 

 

 

DecimalFormat

  • 숫자를 형식화할 때 사용(숫자 ➡️ 형식 문자열)
  • Integer.parseInt()는 콤마(,)가 포함된 문자열을 숫자로 변환할 수 없음.
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number); // result = "1.2E6"

 

기호 의미 패턴 결과
0 10진수(값이 없을 때는 0) 0
0.0
0000000000.0000
1234568
1234567.9
0001234567.8900
# 10진수 #
#.#
##########.####
1234568
1234567.9
1234567.89
E 지수 #,#E0
0.0E0
0.0000000000E0
00.00000000E0
#.#########E0
##.########E0
1.2E6
1.2E6
1.234567890E6
12.34567890E5
1.23456789E6
1.23456789E6

 

 

 

 

 

SimpleDateFormat

  • 날짜와 시간을 다양한 형식으로 출력할 수 있게 해 줌.
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(today);

 

기호 의미 보기
G 연대(BC, AD) AD
y 년도 2023
M 월(1~12 또는 1월~12월) 10 또는 10월 , OCT
w 년의 몇 번째 주(1~53) 50
W 월의 몇 번째 주(1~5) 4
D 년의 몇 번째 일(1~366) 100
d 월의 몇 번째 일(1~31) 15
F 월의 몇 번째 요일(1~5) 1
E 요일 월

 

 

  • 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수도 있음.
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date d = df.parse("2023년 2월 6일"); // 문자열을 Date로 반환
String result = df2.format(d);

 

기호 의미 보기
a 오전/오후(AM, PM) PM
H 시간(0~23) 20
k 시간(1~24) 13
K 시간(0~11) 10
h 시간(0~12) 11
m 분(0~59) 35
s 초(0~59) 55
S 천분의 일초(0~999) 253
z Time zone(General time zone) GMT+9:00
Z Time zone(RFC 822 time zone) +0900
' escape문자(특수문자를 표현) 없음

 

 

 

 

 

 

 

 

 

 


🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지
  1. 날짜와 시간
  2. Calendar 클래스
  3. Calendar에 정의된 필드
  4. 형식화 클래스
  5. DecimalFormat
  6. SimpleDateFormat
'Back-End/Java' 카테고리의 다른 글
  • [JAVA] 지네릭스
  • [JAVA] 컬렉션 프레임워크
  • [JAVA] StringBuffer
  • [JAVA] java.lang패키지의 유용한 클래스
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    스프링
    백준
    다형성
    변수
    Security
    자바
    객체
    알고리즘
    최주호
    JPA
    자바스크립트
    javascript
    의존성주입
    MVC
    게시판만들기
    데이터베이스
    HTTP
    김영한
    html
    spring
    Database
    DB
    Java
    성능최적화
    Swift
    생성자
    프로그래머스
    sql
    jsp
    Spring Security
  • hELLO· Designed By정상우.v4.10.0
뚜비
[JAVA] 날짜와 시간, 형식화
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.