럿고의 개발 노트
[프로그래머스] 자바 중급 > Part4. 날짜와 시간 본문
[프로그래머스] 자바 중급
Part4. 날짜와 시간
1. Date
- 날짜와 시간을 구하기 위한 클래스로 Date 클래스는 JDK 1.0때 만들어 졌으며 Calendar클래스는 JDK 1.1때 만들어 짐.
- Date는 지역화 대한 부분이 고려되지 않아 Calendar 클래스가 만들어졌다.
- 지역화란, 지역에 따라서 시간, 통화, 언어등에 대해 고려하는 프로그래밍을 지역화에 맞춘 프로그래밍이라고 함.
- Date클래스를 보면 대부분의 생성자와 메소드가 Deprecated(사용중지권고)가 되어 있다.
- 기본 생성자를 이용한 Date클래스 생성
- 기본 생성자로 Date인스턴스를 만들게 되면 현재 시간과 날짜 정보를 Date인스턴스가 가지게 됨.
- toString() 메소드를 이용하여 현재 시간을 문자열로 구할 수 있음
- java.util.SimpleDateFormat 클래스를 이용하여 원하는 형태로 출력 가능
- yyyy : 년도
- MM : 월(대문자로 써야함!)
- dd : 일
- hh : 시간
- mm : 분(소문자로 써야함!)
- ss : 초
- a : 오전 / 오후
- zzz : TimeZone
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateExam {
public static void main(String[] args) {
// java.util.Date
// 지역화에 대한 고려가 되어있지 않음
// Date클래스는 대부분의 생성자와 메소드가 Deprecated가 되어 있음
// 즉, 지원을 하지 않고 문제가 될수 있기 때문에 사용하지 말라는 것
Date date = new Date();
System.out.println(date.toString());
SimpleDateFormat ft = new SimpleDateFormat("yyyy.MM.dd 'at' hh:mm:ss zzz"); // 내가 원하는 방식으로 날짜와 시간을 출력해주는 것
System.out.println(ft.format(date));
long today = System.currentTimeMillis(); // 현재 시간을 Loong값으로 구하기
System.out.println(today);
System.out.println(today - date.getTime()); // 시간 연산
}
}
2. Calendar
- Date의 단점을 해결하고 등장한 것이 Calendar 클래스
- 생성 방법
- Calendar Class는 추상클래스임.
- Calendar가 가지고 있는 클래스 메소드 getInstance()를 사용하여 인스턴스를 생성해야 한다.
- getInstance()메소드를 호출하면 내부적으로 java.util.GregorianCalendar 인스턴스를 만들어서 리턴한다.
- GregorianCalendar는 Calendar의 자식 클래스이다.
- Calendar 클래스를 이용해서 현재 날짜, 시간에 대한 정보를 알아내는 방법
- Calendar는 현재 날짜, 시간 정보를 가지고 있음
- get메소드에 Calendar의 상수를 어떤 것을 넣어주느냐에 따라서 다른 값이 나오게 됨.
- Calendar.YEAR : 년도
- Calendar.MONTH : 월(0(1월) ~ 11(12월))
- Calendar.DATE : 일
- Calendar.HOUR_OF_DAY : 시
- Calendar.MINUTE : 분
- 원하는 날짜, 시간에 대한 정보를 얻어오는 방법
- add메소드를 이용
- 상수와 정수를 사용하여 +,- 연산 가능
import java.util.Calendar;
public class CalendarExam {
/* java.util.Calendar
* java1.1에 추가, date클래스가 지역화를 고려하지 않기 때문에, 지역화 고려를 위해 추가
* 상수가 많이 존재
* 추상클래스이기 때문에 new연산자를 이용해서 생성자를 만들수 없음
* Gregorian Calendar를 받아서 getInstance();로 불러옴
* 미래에 새로운 형식의 표준 달력이 만들게 되면 업그레이드한 다른 달력 클래스가 쉽게 리턴할수 있도록 하기 때문
*/
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.get(Calendar.YEAR)); // 년도
System.out.println(cal.get(Calendar.MONTH) + 1); // 달 * 월은 0부터 인식하기때문에 제대로된 달은 +1를 해줘야 함
System.out.println(cal.get(Calendar.DATE)); // 일
System.out.println(cal.get(Calendar.HOUR)); // 12시간 기준
System.out.println(cal.get(Calendar.HOUR_OF_DAY)); // 24시간 기준
System.out.println(cal.get(Calendar.MINUTE)); // 분
System.out.println("=========================================");
cal.add(Calendar.HOUR, 5); // 전후 시간을 구할수 있는 법
System.out.println(cal.get(Calendar.YEAR)); // 년도
System.out.println(cal.get(Calendar.MONTH) + 1); // 달 * 월은 0부터 인식하기때문에 제대로된 달은 +1를 해줘야 함
System.out.println(cal.get(Calendar.DATE)); // 일
System.out.println(cal.get(Calendar.HOUR)); // 12시간 기준
System.out.println(cal.get(Calendar.HOUR_OF_DAY)); // 24시간 기준
System.out.println(cal.get(Calendar.MINUTE)); // 분
Calendar cal2 = Calendar.getInstance();
cal2.add(Calendar.DATE, 100);
StringBuffer sb = new StringBuffer();
sb.append(cal2.get(Calendar.YEAR) + "년");
sb.append(cal2.get(Calendar.MONTH) + "월");
sb.append(cal2.get(Calendar.DATE) + "일");
System.out.println(sb);
}
}
3. java.time 패키지
- Java에서 제공하는 Date, Time API는 부족한 기능 지원을 포함한 여러가지 문제점을 가지고 있었다.
- JDK 코어에서 이런 문제점들을 해결하고 더 좋은 직관적인 API들을 제공하기 위해 새롭게 재 디자인한 Date, Time API를 Java SE8부터 제공
- 핵심 클래스는 오브젝트를 생성하기 위해 다양한 factory 메서드를 사용
- 오브젝트 자기 자신의 특정 요소를 가지고 오브젝트를 생성할 경우 of 메서드를 호출하면 되고, 다른 타입으로 변경할 경우에는 from 메서드를 호출하면 됨.
- LocalDateTime 클래스를 이용해서 현재 시간 time 객체 생성 가능
- new() 메서드는 현재 시간을 구함.
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) {
/* java.time 패키지
* java.util.Date는 직관적이지 못했음(달을 구할때 +1를 해줘야 하는 것 등)
* Joda-Time : 자바 Date와 Time을 대신 할 수 있는 클래스를 제공하는 라이브러리
* java SE8부터 새롭게 디자인한 Date, Time Api 제공
* 핵심 클래스는 오브젝트를 생성하기 위해 다양한 factory 메소드를 사용
*/
LocalDateTime timePoint = LocalDateTime.now(); // 현재의 날짜와 시간을 구함
System.out.println(timePoint);
LocalDate ld = LocalDate.of(2012, Month.DECEMBER, 12); // 내가 원하는 날짜를 지정할수 있는 법
System.out.println(ld);
LocalTime lt = LocalTime.of(17, 18); // 내가 원하는 시간을 반환
System.out.println(lt);
LocalTime lt2 = LocalTime.parse("10:15:30"); // 해당 타입에 대한 객체가 생성
System.out.println(lt2);
LocalDate theDate = timePoint.toLocalDate();
System.out.println(theDate);
System.out.println(timePoint.getMonthValue()); // 월(이것의 장점은 + 1을 하지 않아도 실제 달이 나옴)
Month month = timePoint.getMonth();
System.out.println(month.getValue());
System.out.println(timePoint.getHour());
}
}
출처
'Java Note > [프로그래머스] 자바 중급(동영상 강의)' 카테고리의 다른 글
[프로그래머스] 자바 중급 > Part6. 어노테이션 (0) | 2020.02.04 |
---|---|
[프로그래머스] 자바 중급 > Part5. IO (0) | 2020.02.04 |
[프로그래머스] 자바 중급 > Part3. java.util 패키지 (0) | 2020.01.31 |
[프로그래머스] 자바 중급 > Part2. java.lang 패키지 (0) | 2020.01.31 |
[프로그래머스] 자바 중급 > Part1. Object 클래스 (0) | 2019.12.06 |
Comments