Java - 날짜와 시간
studyDate
- java.util 패키지의 클래스들 중 하나이다.
-
- 공식 문서에 Deprecated 표시되어 있는 부분은 사용을 자제해야한다.
-
JDK 1.0 때 만들어졌다.
- 이에 따라 지역화를 고려하지 않았다.
지역화 : 지역에 따라서 시간, 통화(원, 달러, 엔 등) 언어등에 대하여 고려하는 프로그래밍
- 지역화를 고려한 클래스 : Calendar 클래스
- 이에 따라 지역화를 고려하지 않았다.
기본 생성자를 이용한 Date 클래스 생성
- 기본 생성자로 Date인스턴스를 만들게 되면 현재 시간과 날짜 정보를 Date인스턴스가 가지게 됩니다.
Date date = new Date();
java.util.SimpleDateFormat 클래스
-
java.util.SimpleDateFormat 클래스를 이용해서 원하는 형태로 출력하는 방법
- yyyy는 년, MM은 월, dd는 일을 표현한다.
- hh는 시간, mm은 분, ss는 초를 표현하며 a는 오전/오후 를 표현한다.
- zzz는 TimeZone을 나타낸다. 한국의 경우 한국표준시 KST가 TimeZone에 해당하는 값입니다.
SimpleDateFormat ft = new SimpleDateFormat ("yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println(ft.format(date));
// 출력 결과 : 2022.11.08 at 13:35:12 오전KST
System.currentTimeMillis();
- 시스템의 현재 시간을 Long 값으로 구하는 방법
System.out.println(date.getTime());
// System이 가지고 있는 currentTimeMillis()메소드를 이용해도 됩니다.
long today = System.currentTimeMillis();
System.out.println(today);
Calendar
- java.util 패키지의 클래스들 중 하나이다.
-
- 공식 문서에 Deprecated 표시되어 있는 부분은 사용을 자제해야한다.
-
JDK 1.1 때 만들어졌다.
- Date 클래스의 단점인 지역화 미고려를 해결하기 위하여 등장하였다.
추상 클래스
-
Calendar 클래스는 추상 클래스이다.
추상 클래스
- 하나 이상의 추상 메서드를 포함한 클래스
- new 키워드를 사용하여 인스턴스를 생성할 수 없다.
- 해당 클래스를 상속받아 구현한 클래스의 인스턴스를 생성해 주어야 한다.
- Calendar 클래스에 대한 인스턴스를 생성하려면 Calendar가 가지고 있는 클래스 메소드 getInstance()를 사용해야 한다.
getInstance() 메소드를 호출하면 내부적으로 java.util.GregorianCalendar 인스턴스를 만들어서 리턴한다.
Calendar cal = Calendar.getInstance();
Calendar 클래스를 이용해서 현재 날짜와 시간에 대한 정보를 알아내는 방법
- Calendar는 현재 날짜와 시간에 대한 정보를 가집니다.
- Calendar가 가지고 있는 get메소드에 Calendar의 상수를 어떤 것을 넣어주느냐에 따라서 다른 값이 나오게 됩니다.
int yyyy = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1; // 월은 0부터 시작합니다.
int date = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR); // 2
int hour_total = cal.get(Calendar.HOUR_OF_DAY); // 14
int minute = cal.get(Calendar.MINUTE);
-
Calendar 클래스를 이용해서 원하는 날짜나 시간에 대한 정보 얻어오는 방법
- Calendar가 가지고 있는 add메소드를 이용하면 쉽게 다음 날짜나 이전 날짜를 구할 수 있습니다.
- 현재 캘린더에 시간을 5시간 더하는 방법. 5를 -5로 수정하면 5시가 전을 구할 수 있게 됩니다.
cal.add(Calendar.HOUR, 5);
java.time 패키지
-
java.util 패키지의 Date와 Calendar 클래스에는 다양한 문제점이 존재. (기능 부족 또는 복잡한 API 문서)
-
Java SE 8 버전부터 새롭게 디자인한 Date, Time API 를 제공.
특징
- 새로운 API의 핵심 클래스는 오브젝트를 생성하기 위해 다양한 factory 메서드를 사용한다.
- 오브젝트 자기 자신의 특정 요소를 가지고 오브젝트를 생성할 경우 of 메서드를 호출하면 되고, 다른 타입으로 변경할 경우에는 from 메서드를 호출하면 된다.
LocalDateTime 클래스를 이용해서 현재 시간 time객체 만드는 방법
- now는 현재 시간을 구한다.
LocalDateTime timePoint = LocalDateTime.now(); // 현재의 날짜와 시간
System.out.println(timePoint); // 2022-11-08T14:28:05
원하는 시간으로 time객체 생성하는 방법
// 2012년 12월 12일의 시간에 대한 정보를 가지는 LocalDate객체를 만드는 방법
LocalDate ld1 = LocalDate.of(2012, Month.DECEMBER, 12); // 2012-12-12 from values
// 17시 18분에 대한 LocalTime객체를 구한다.
LocalTime lt1 = LocalTime.of(17, 18); // 17:18 (17시 18분)
// 10시 15분 30초라는 문자열에 대한 LocalTime객체를 구한다.
LocalTime lt2 = LocalTime.parse("10:15:30"); // From a String
현재와 날짜와 시간정보를 getter메소드를 이용하여 구하는 방법
LocalDate theDate = timePoint.toLocalDate();
Month month = timePoint.getMonth(); // 1월 부터 시작한다.
int day = timePoint.getDayOfMonth();
int hour = timePoint.getHour();
int minute = timePoint.getMinute();
int second = timePoint.getSecond();
// 달을 숫자로 출력한다 1월도 1부터 시작하는 것을 알 수 있습니다.
System.out.println(month.getValue() + "/" + day + " " + hour + ":" + minute + ":" + second);