자바

JAVA 자바 Date 클래스, Calendar 클래스 / Date() , getInstance() , TimeZone() , getAvailableIDs()

알통몬_ 2017. 3. 15. 10:56
반응형

안녕하세요 알통몬입니다.

공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^ 


Date 클래스

시스템의 날짜 및 시각을 읽을 수 있도록 java.util 패키지의 

Date 클래스와 Calendar 클래스를 제공하고 있습니다. 

Date 클래스는 날짜를 표현하는 클래스입니다. 

객체 간에 날짜 정보를 주고 받을 때 사용합니다. 

대부분이 Deprecated되어있고 Date() 생성자만 주로 사용합니다. 

Date() 생성자는 컴퓨터의 현재 날짜를 읽어 Date 객체로 만듭니다.

Date today = new Date();

toString() 메서드를 사용하면 현재 날짜를 문자열로 얻을 수 있습니다. 

toString() 메서드는 영문으로 된 날짜를 리턴합니다. 


현재 날짜를 출력하는 예제를 보겠습니다.

import java.text.*;

import java.util.*;


public class DateExample {

    public static void main(String[] args) {

Date now = new Date();

String strNow1 = now.toString();

System.out.println(strNow1);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");

String strNow2 = sdf.format(now);

System.out.println(strNow2);

}

}

 



Calendar 클래스

 달력을 표현한 abstract 클래스이기 때문에 new 연산자를 사용해서 인스턴스를 생성할 수 없습니다. 날짜와 시간을 계산하는 방법이 지역과 나라 또는 문화에 따라 다르기 때문입니다.

우리나라만 하더라도 양력과 음력이 동시에 사용되고 있죠? 

Calendar 클래스는 날짜와 시간을 계산하는데 꼭 필요한 메서드들만 선언되어 있습니다.

특정한 역법을 따르는 계산 로직은 하위 클래스에서 구현하도록 되어있습니다. 

특별한 경우가 아니면 직접 하위 클래스를 만들 필요는 없고,

Calendar 클래스의 static 메서드인 getInstance() 메서드를 이용하면 

현재 운영체제에 설정되어 있는 시간대를 기준으로 한 Calendar 하위 객체를 얻을 수 있습니다.

 Calendar now = Calendar.getInstance();

Calendar 객체를 얻은 후 get() 메서드를 사용해서 날짜와 시간에 대한 정보르 얻을 수 있습니다.

int year = now.get(Calendar.YEAR);          => 년도 리턴

int month = now.get(Calendar.MONTH) + 1; => 월 리턴

int day = now.get(Calendar.DAY_OF_MONTH); => 일 리턴

int week = now.get(Calendar.DAY_OF_WEEK); => 요일 리턴

int amPm = now.get(Calendar.AM_PM); => 오전/오후 리턴

int hour = now.get(Calendar.HOUR); => 시 리턴

int minute = now.get(Calendar.MINUTE); => 분 리턴

int second = now.get(Calendar.SECOND);=> 초 리턴


get()메서드를 호출할 때 사용한 매개값은 모두 Calendar 클래스에 선언되어 있는 상수들 입니다.


사용 예제)

 import java.util.*;


public class CalendarExample {

public static void main(String[] args) {

Calendar now = Calendar.getInstance();

int year    = now.get(Calendar.YEAR);                

int month  = now.get(Calendar.MONTH) + 1;          

int day    = now.get(Calendar.DAY_OF_MONTH);     

int week    = now.get(Calendar.DAY_OF_WEEK);        

String strWeek = null;

switch(week) {

case Calendar.MONDAY:

strWeek = "월";

break;

case Calendar.TUESDAY:

strWeek = "화";

break;

case Calendar.WEDNESDAY:

strWeek = "수";

break;

case Calendar.THURSDAY:

strWeek = "목";

break;

case Calendar.FRIDAY:

strWeek = "금";

break;

case Calendar.SATURDAY:

strWeek = "토";

break;

default:

strWeek = "일";

}

int amPm  = now.get(Calendar.AM_PM);   

String strAmPm = null;

if(amPm == Calendar.AM) {

strAmPm = "오전";

} else {

strAmPm = "오후";

}

int hour    = now.get(Calendar.HOUR);                 

int minute  = now.get(Calendar.MINUTE);             

int second  = now.get(Calendar.SECOND);              


System.out.print(year + "년 ");

System.out.print(month + "월 ");

System.out.println(day + "일 ");

System.out.print(strWeek + "요일 ");

System.out.println(strAmPm + " ");

System.out.print(hour + "시 ");

System.out.print(minute + "분 ");

System.out.println(second + "초 ");

}

}



Calendar 클래스의 오버로딩된 다른 getInstance() 메서드를 이용하게 되면 미국/로스앤젤레스의 현재 날짜 같은 다른 시간대의 Calendar를 얻을 수 있습니다. 알고 싶은 시간대의 java.util.TimeZone 객체를 얻어

Calendar.getInstance() 메서드의 매개값으로 넘겨주면 됩니다.

ex)

TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");

Calendar now = Calendar.getInstance(tz);

TimeZone.getTimeZone() 메서드의 매개값은 TimeZone 클래스의 static 메서드은 getAvailableIDs()를 호출하여 얻은 시간대 문자열 중에서 하나를 골라 사용하면 됩니다. 이 메서드의 리턴타입은 String 배열입니다. 


예제)

import java.util.TimeZone;


public class PrintTimeZoneID {

public static void main(String[] args) {

String[] availableIDs = TimeZone.getAvailableIDs();

for(String id : availableIDs) {

System.out.println(id);

}

}

 

}


반응형