생각을 개발하자, 박진형

[Java] java.lang 패키지 : Calendar, DateFormat, TimeZone 본문

Java/java(old post)

[Java] java.lang 패키지 : Calendar, DateFormat, TimeZone

imjinbro imjinbro 2017.01.21 13:00

날짜와 시간은 프로그램에 있어서 아주 자주 사용되는 데이터이다.

가령 타임라인이 있다고 하자. 타임라인에 쓰여진 글들은 말 그대로 타임순서대로 나열되어 있는 것이다.

이때 필요한 것이 시간/날짜를 알 수 있는 클래스다.

java.lang > java.util 패키지에서는 이러한 기능을 하는 표준클래스들이 있다.




[Calendar 클래스]

캘린더 클래스는 인터페이스다. 인터페이스인 이유는 나라마다 날짜를 계산하는 방법(우리나라 : 양력, 음력)이 문화와 지역에 따라 다르기 때문이다.

캘린더 클래스에서는 기본적으로 날짜를 계산하는 메소드만 있고 나머지는 인터페이스를 구현하는 클래스에서 따로 구현을 해야한다.

캘린더 클래스를 구현하여 양력을 계산하는 GregorianCalendar 클래스가 있다.

api 참고 : http://docs.oracle.com/javase/8/docs/api/

 

[GregorianCalendar]

양력을 나타내기 위한 클래스

출력하는 컴퓨터를 기준해서 날짜와 시간이 찍혀서 나온다(설정된 표준시에 맞춰서)

컴퓨터의 설정된 표준시말고 다른 국가, 지역의 표준시를 설정해서 날짜, 시간을 가져올 수도 있다.(java.util의 TimeZone 클래스)

생성자를 이용해서 임의로 원하는 시간대로 생성할 수 있다.



[메소드]

=> get : 양식에 맞는 시간을 들고오는 메소드

=> setTimeZone : 원하는 국가의 시간대를 표준시로 맞출 수 있는 메소드(+ TimeZone 클래스)

api 참고 : http://docs.oracle.com/javase/8/docs/api/java/util/GregorianCalendar.html

http://docs.oracle.com/javase/8/docs/api/





[TimeZone]

컴퓨터에서 설정되어있는 시간말고 다른 시간대로 설정할 수 있는 클래스(Calendar와 같이쓴다)


[메소드] 

=> getTimeZone : 원하는 국가의 시간대를 얻어오는 static 메소드

=> getAvailableIDs : getTimeZone에서 사용할 타임존의 이름을 얻어오는 메소드





[DateFormat]

GregorianCalendar을 써보면 연월일 시분초를 하나씩 얻어서 출력해야함을 알 수 있다. 매우 귀찮은 작업이 아닐 수 없다.

DateFormat 인터페이스는 시간 포맷을 간단하게 구현할 수 있게끔 해주는 인터페이스다.

DateFormat을 구현한 클래스는 SimpleDateFormat(유일함)이다.

정해진 날짜포맷을 이용하면 간단하게 구현할 수 있다.

DateFormat은 Calendar 클래스를 지원하지않음, 그보다 구 클래스인 Date를 지원한다.

그러나 걱정안해도됨. Calendar 클래스에는 Date 객체를 리턴하는 getTime 메소드가 있기때문에 설정가능하다.

y : 년 / M : 월 / d : 일 / a : 오전,오후 중 1 / h : 시 / m : 분 / s : 초


[메소드]

=> format : SimpleDateFormat의 객체를 활용해서 정해놓은 포맷과 날짜, 시간을 얻는 클래스를 인자를 활용하여 포맷을 반환받는 메소드

=> setTimeZone : TimeZone 클래스를 활용해서 얻고자하는 타임존을 세팅하는 메소드 





[활용하기]

GregorianCalendar + SimpleDateFormat을 활용하여 디데이 기능 만들기(기능이 될 것 같다만 보고 복습삼아 이후 만들어본다)


1) GregorianCalendar getTimeInMillis + Date.setTime를 활용하여 현재 시간을 밀리세컨즈 단위로 환산한 값을 현재 시간으로 설정한다(GregorianCalendar)

   => setTime으로 시간을 설정 이유 : SimpleDateFormat의 format(포맷에 맞춰 출력)이 Date 타입으로 파라미터를 받기 때문

2) SimpleDateFormat 객체 생성 시 출력할 시간 포맷을 설정한다.

   => 1번에서 찍힌 시간이 날짜 포맷에 출력되는지만 확인하기위해, 나중에는 디데이 포맷으로...

3) SimpleDateFormat.format에 1번에서 설정했던 시간을 파라미터로 넘겨 시간을 찍어본다.