본문 바로가기
개발언어/Java : 자바

자바 쉽게 배우기 12 - 날짜와 시간(1)

by 개발자D 2023. 1. 27.

날짜와 시간(1)

날짜와 시간

자바의 날짜와 시간은 Date와 Calendar 클래스, time패키지를 사용해 나타냅니다.  Date, Calendar, time 패키지 순으로 발전되어 왔으며 최근에는 Date, Calendar를 대신하여 time 패키지를 사용하는 추세입니다. 날짜와 시간에 관해서는 관련 업무가 아니라면 깊게 이해할 필요는 없습니다. 백과사전이라고 생각하고 필요한 부분만 찾아 사용해 보세요. 이 글에서는 우선 Date와 Calendar 클래스에 대해 알아봅니다. 다음 글에서 time 패키지에 대해 다루겠습니다.

 

Date 클래스와 Calendar 클래스

Date 클래스와 Calendar 클래스는 Java.util 패키지에 포함되어 있습니다.

 

Calendar 클래스의 인스턴스 생성

Calendar Class는 추상클래스로 static 메서드 getInstance()를 통해서만 인스턴스를 얻을 수 있습니다. 

Calendar cal = new Calendar(); X
Calendar cal = Calendar.getInstance(); O

 

  • cal은 현재 시스템의 날짜와 시간에 대한 정보를 담고 있습니다.
  • 시스템의 국가와 지역설정을 확인해서 태국이면 BuddhistCalendar의 인스턴스를 반환하고, 그 외에는 GregorianCalendar의 인스턴스를 반환합니다.

 

Date와 Calendar 간의 변환

Calendar를 Date로 변환

Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMillis());

// getTimeInMillis()는 시간을 밀리초(1/1000초) 단위로 반환

 

Date를 Calendar로 변환

Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(d);

 

 

Calendar 클래스의 get, set 메서드

get 메서드 : 시간과 날짜 값을 얻고 싶을 때

 

Calendar형 인스턴스 cal

cal.get(Calendar.YEAR)
cal.get(Calendar.MONTH) (0~11) 0: 1월, 11: 12월
cal.get(Calendar.DATE)
cal.get(Calendar.WEEK_OF_YEAR) 이 해의 몇 째 주
cal.get(Calendar.WEEK_OF_MONTH) 이 달의 몇 쨰 주
cal.get(Calendar.DAY_OF_YEAR) 이 해의 몇 일
cal.get(Calendar.DAY_OF_MONTH) 이 달의 몇 일
cal.get(Calendar.DAY_OF_WEEK) (1~7) 1: 일요일, 2: 월요일 ...
cal.get(Calendar.DAY_OF_WEEK_IN_MONTH) 이 달의 몇 째 요일
cal.get(Calendar.AM_PM) 오전_오후  0: 오전, 1: 오후
cal.get(Calendar.HOUR) 시간 (12)
cal.get(Calendar.HOUR_OF_DAY) 시간 (24)
cal.get(Calendar.MINUTE) 분
cal.get(Calendar.SECOND) 초
cal.get(Calendar.MILLISECOND) 1000분의 1초 (0~999)
cal.get(Calendar.ZONE_OFFSET) (-12~12)
cal.getActualMaximum(Calendar.DATE) 이달의 마지막 일

 

set메서드  : 시간과 날짜 값을 설정하고 싶을 때

 

void set(int field, int value) // 지정한 field를 value값으로 설정
void set(int year, int month, int date)
void set(int year, int month, int date, int hourOfDay, int minute)
void set(int year, int month, int date, int hourOfDay, int minute, int second)

 

시간 단위 변경

작은 단위 → 큰 단위 : 단위만큼 나눠줍니다.

큰 단위 → 작은 단위 : 단위만큼 곱해줍니다.

 

getTimeInMillis()로 얻은 값의 단위 변경

  1. 초단위 : getTimeInMillis() 메서드로 얻은 값 / 1000
  2. 분단위 : getTimeInMillis() 메서드로 얻은 값 / 1000 * 60(초)
  3. 시단위 : getTimeInMillis() 메서드로 얻은 값 / 1000 * 60(분) * 60(초)
  4. 일단위 : getTimeInMillis() 메서드로 얻은 값 / 1000 * 24(시간) * 60(분) * 60(초)

두 날짜 간의 차이

  1. 두 날짜를 getTimeInMillis()로 얻어 차이를 구하고 원하는 단위로 변경합니다.

초단위를 (시, 분, 초)로 변경

  1. 초단위를 시단위(60(분)*60(초))로 나눕니다. 몫이 시간 값이 됩니다.
  2. 나눈 나머지를 분단위(60(초))로 나눕니다. 몫이 분 값, 나머지가 초 값이 됩니다.

 

field값의 증가, 감소

date.set(2023, 1, 27)

add(int field, int amount) 
// 지정한 field의 값을 원하는만큼 증가 또는 감소
// 다른 필드에 영향을 줌

date.add(Calendar.DATE, 31)
// 2023, 2, 27
// 일 필드의 증가로 월 필드가 영향을 받음

roll(int field, int amount) 
// 지정한 field의 값을 원하는만큼 증가 또는 감소
// 다른 필드에 영향을 주지 않음

date.roll(Calendar.DATE, 31)
// 2023, 1, 27

// 단, 월필드를 변경할 때 해당 월에 해당 일이 없으면 자동으로 말일로 수정됨

 

기타 메서드

반환타입 메서드명(매개변수) 설명
boolean  after(Object when) 매개변수 when보다 시간상 이후일 때 true를 반환합니다.
boolean  before(Object when)  매개변수 when보다 시간상 이전일 때 true를 반환합니다.
boolean  isLeapYear(int year) 매개변수 year가 윤년일 때 true를 반환합니다.
int  dayDiff(int y1, int m1, int d1, int y2, int m2, int d2)  두 날짜간의 차이를 일단위로 반환합니다.
int  getDayOfWeek(int year, int month, int day)  지정한 날짜의 요일을 반환합니다. (1~7, 1: 일요일)
int  convertDateToDay(int year, int month, int day) 년월일을 입력받아서 일단위로 변환합니다.
String  convertDayToDate(int day)  일단위의 값을 년월일 형태의 문자열로 변환하여 반환합니다.

 

날짜의 형식화

java.text패키지의 SimpleDateFormat 클래스를 사용하여 날짜를 특정 패턴으로 형식화할 수 있습니다.

 

Date 값을 특정 패턴의 String 값으로 변환

Date today = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String result = sdf.format(today);

//2023-01-27

 

String 값을 Date 인스턴스로 변환

SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
Date d = sdf.parse("2023년 1월 27일");

날짜와 시간을 나타내는 Date와 Calendar 클래스에 대해 알아보았습니다. 다음 글에서는 이어서 time 패키지에 대해 설명드리겠습니다. 감사합니다.

 

[개발 언어] 자바(JAVA) 쉽게 배우기 13 - 날짜와 시간(2)

날짜와 시간 지난 글의 Date와 Calendar 클래스에 이어 time 패키지에 대해 알아봅시다. Java.time패키지 Java.time패키지는 jdk1.8부터 Date, Calendar 클래스를 보완하기 위해 추가되었습니다. time 패키지의 클

devdharu.tistory.com