Date, Calendar
자바에서는 날짜 관련 처리를 지원하기 위해서 Date, Calendar 객체를 제공한다.
Date는 JDK 1.0, Calendar는 JDK 1.1 버전에서 지원되었다.
Date 가 좀더 간단하고, 이전 버전과의 호환성을 위해 계속 제공하고 있다.
Calendar는 Date 객체의 추상화 버전이라고 할 수 있고, Calendar객체를 이용하는 것을 권장한다.
특정 날짜를 지정하거나, 날짜 연산을 할 경우 Calendar를 사용한다. 또한 Calendar를 사용하여 지역화 처리를 할 수 있다.
* JDK8 이전의 Date 객체에는 몇가지 문제점이 존재한다. (http://d2.naver.com/helloworld/645609)
- 불변 객체가 아니기 때문에 스레드에서 문제가 발생할 수 있다.
LocalTime, LocalDate, LocalDateTime
JDK8 부터 제공되는 LocalTime, LocalDate, LocalDateTime 객체는
기존의 Date, Calendar 객체의 부족한 점을 보완하기 위해 신규로 생성된 객체이다.
l Calendar의 Month 는 0부터 시작함(0이 1월)
l Date 객체는 불변객체가 아님: 스레드에 안전하지 않음
이러한 문제점들로 인하여 Joda-Time, 아파치의 common의 FastDateTime 등의 라이브러리를 사용하였는데
이를 보완하기 위해 신규 객체로 제공되었다.
사용법은 Joda-Time 과 유사하다.
of() 메소드로 날짜를 설정하고, ofPattern() 메소드로 날짜를 출력할 패턴을 생성한다.
plus..(), minus..() 메소드로 날짜를 수정할 수 있다.
import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; public class DateCalendarExample { public void exampleDate() { Date now = new Date(); System.out.println(now); // 포맷 출력 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(now)); } public void exampleCalendar() { // Calendar 객체 생성 Calendar calendar = Calendar.getInstance(); // 현재 일자 Date now = calendar.getTime(); System.out.println(now); // 포맷 출력 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(now)); // 날짜 설정(달이 0부터 시작함) calendar.set(2014, 1, 2, 3, 4, 5); System.out.println("Year : " + calendar.get(Calendar.YEAR)); System.out.println("Year : " + calendar.get(Calendar.MONTH)); System.out.println("Year : " + calendar.get(Calendar.DAY_OF_MONTH)); System.out.println("Year : " + calendar.get(Calendar.HOUR_OF_DAY)); System.out.println("Year : " + calendar.get(Calendar.MINUTE)); System.out.println("Year : " + calendar.get(Calendar.SECOND)); System.out.println(sdf.format(calendar.getTime())); try { // 문자열을 일자형으로 파싱 Date time = sdf.parse("2001-05-09 13:45:30"); System.out.println(sdf.format(time)); } catch (ParseException e) { e.printStackTrace(); } } public void exampleLocalDateTime() { // 현재 시간 LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // 날짜 설정 LocalDateTime time = LocalDateTime.of(LocalDate.now(), LocalTime.now()); System.out.println(time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // 날짜 설정 LocalDateTime time2 = LocalDateTime.of(2014, 1, 2, 3, 4, 5); System.out.println(time2.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // 파싱 LocalDateTime time3 = LocalDateTime.parse("2001-05-09 13:45:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); System.out.println(time3.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // 일자 추가 LocalDateTime time4 = LocalDateTime.now().plusDays(3); System.out.println(time4.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } public static void main(String[] args) { DateCalendarExample example = new DateCalendarExample(); example.exampleDate(); System.out.println("--------------------------"); example.exampleCalendar(); System.out.println("--------------------------"); example.exampleLocalDateTime(); } }
'java' 카테고리의 다른 글
[Math] 좌표계의 x, y를 이용한 각도 구하기 (0) | 2016.05.19 |
---|---|
[개념] 스택(stack)과 힙(heap) (0) | 2016.02.16 |
[어노테이션] 어노테이션과 리플렉션을 이용한 메소드 실행시간 출력하기 (0) | 2015.06.04 |
[알고리즘] 퀵정렬 (0) | 2015.06.01 |
MSSQL 에서 Oracle 에 있는 테이블로 정보를 insert 프로그램 (0) | 2013.02.05 |