2021.06.19 - [Study/Java Study] - 자바스터디 6주차 (2)
1. 날짜와 시간
1.1 Calendar와 Date
Calendar는 추상클래스이기 때문에 직접 객체를 생성할 수 없고, 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야한다.
package Ch10;
import java.util.Calendar;
public class CalendarEx1 {
public static void main(String[] args) {
Calendar today = Calendar.getInstance();
System.out.println("이 해의 년도 : " + today.get(Calendar.YEAR));
System.out.println("월(0~11, 0:1월) : " + today.get(Calendar.MONTH)); // 0==1월, 1==2월...11==12월
System.out.println("이 해의 몇 째 주 : " + today.get(Calendar.WEEK_OF_YEAR));
System.out.println("이 달의 몇 째 주 : " + today.get(Calendar.WEEK_OF_MONTH));
System.out.println("이 달의 몇 일 : " + today.get(Calendar.DATE));
System.out.println("이 해의 몇 일 : " + today.get(Calendar.DAY_OF_MONTH));
System.out.println("이 해의 몇 일 : " + today.get(Calendar.DAY_OF_YEAR));
System.out.println("요일(1~7, 1:일요일) : " + today.get(Calendar.DAY_OF_WEEK));// 1 == 일, 2==월, 7==토
System.out.println("이 달의 몇 째 요일 : " + today.get(Calendar.DAY_OF_WEEK_IN_MONTH));
System.out.println("오전_오후(0:오전, 1:오후) : " + today.get(Calendar.AM_PM));
System.out.println("시간(0~11): " + today.get(Calendar.HOUR));
System.out.println("시간(0~23): " + today.get(Calendar.HOUR_OF_DAY));
System.out.println("분(0~59): " + today.get(Calendar.MINUTE));
System.out.println("초(0~59): " + today.get(Calendar.SECOND));
System.out.println("1000분의 1초(0~999): " + today.get(Calendar.MILLISECOND));
System.out.println("TimeZone(-12~+12): " + (today.get(Calendar.ZONE_OFFSET) / (60 * 60 * 1000)));
System.out.println("이 달의 마지막 날: " + today.getActualMaximum(Calendar.DATE));
}
}
get(Calendar.MONTH)로 얻어오는 값의 범위는 1~12가 아닌 0~11이다.
0이면 1월 1이면 2월.. 11이면 12월을 의미한다.
package Ch10;
import java.util.*;
public class CalendarEx2 {
public static void main(String[] args) {
final String[] DAY_OF_WEEK = { "", "일", "월", "화", "수", "목", "금", "토" };
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
date1.set(2021, 5, 21);
System.out.println("date1은 " + toString(date1) + DAY_OF_WEEK[date1.get(Calendar.DAY_OF_WEEK)] + "요일이고,");
System.out.println("오늘(date2)은 " + toString(date2) + DAY_OF_WEEK[date2.get(Calendar.DAY_OF_WEEK)] + "요일입니다.");
long difference = (date2.getTimeInMillis() - date1.getTimeInMillis()) / 1000;
System.out.println("그 날(date1)부터 지금(date2)까지" + difference + "초가 지났습니다.");
System.out.println("일(day)로 계산하면 " + difference / (24 * 60 * 60) + "일입니다.");
}
private static String toString(Calendar date) {
return date.get(Calendar.YEAR) + "년 " + (date.get(Calendar.MONTH) + 1) + "월 " + date.get(Calendar.DATE) + "일 ";
}
}
2. 형식화 클래스
숫자, 날짜, 텍스트 데이터를 일정한 형식에 맞게 표현할 수 있는 방법을 객체지향적으로 설계하여 표준화했다.
2.1 DecimalFormat
숫자를 형식화 하는데 사용한다.
사용하는 방법
double number = 1234567.89; DecimalFormat df = new DecimalFormat("#.#E0"); String result = df.format(number);
2.2 SimpleDateFormat
Date와 Calendar만으로 날짜 데이터를 원하는 형태로 다양하게 출력하는 것은 불편하고 복잡하다.
원하는 출력형식의 패턴을 작성하여 SimpleDateFormat 인스턴스를 생성한 다음 출력하고자 하는 Date인스턴스를 가지고 format(Date d)를 호출하면 지정한 출력형식에 맞게 변환된 문자열을 얻게 된다.
사용하는 방법
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//오늘 날짜를 yyyy-MM-dd형태로 변환하여 반환한다.
String result = df.format(today);
Calendar를 Date로 변환할땐 getTime()
Date를 Calendar로 변환할땐 setTime()
parse(String source)를 사용하면 문자열을 Date인스턴스로 변환해줘서 유용하게 쓸 수 있다.
2.3 ChoiceFormat
ChoiceFormat은 특정 범위에 속하는 값을 문자열로 변환해준다.
2.4 MessageFormat
MessageFormat은 데이터를 정해진 양식에 맞게 출력할 수 있도록 도와준다. 데이터가 들어갈 자리를 마련해 놓은 양식을 미리 작성하고 프로그램을 이용해서 다수의 데이터를 같은 양식으로 출력할 때 사용하면 좋다.
3. java.time패키지
3.1 java.time패키지의 핵심 클래스
Calendar클래스와 달리 java.time패키지에서는 날짜와 시간을 별도의 클래스로 분리해 놓았다.
LocalDate 날짜
LocalTime 시간
LocalDateTime 날짜 & 시간
LocalDateTime + 시간대 -> ZonedDateTime
Period 두 날짜간의 차이 (날짜-날짜)
Duration 시간의 차이 (시간-시간)
java.time패키지에 속한 클래스의 객체를 생성하는 가장 기본적인 방법은 now()와 of()를 사용하는 것이다.
now()는 현재 날짜와 시간을 저장하는 객체를 생성한다.
of()는 해당 필드값을 순서대로 지정해 주기만 하면 된다.
3.2 LocalDate와 LocalTime
객체를 생성하는 방법
LocalDate today = LocalDate.now(); //오늘의 날짜
LocalTime now = LocalTime.now(); // 현재시간
LocalDate birthDate = LocalDate.of(2021, 06, 23);
LocalTime birthDate = LocalTime.of(23, 59, 59);
3.3 Instant
Instant는 에포크 타임부터 경과된 시간을 나노초 단위로 표현한다.
3.4 LocalDateTime과 ZonedDateTime
3.5 TemporalAdjusters
자주 쓰일만한 날짜 계산들을 대신 해주는 메서드를 정의 해놓은 것이다.
3.6 Period와 Duration
period는 날짜의 차이, duration은 시간의 차이를 계산하기 위한것
between(),util()
3.7 파싱과 포맷
'Study > Java Study' 카테고리의 다른 글
자바스터디 8주차 (1) (0) | 2021.06.28 |
---|---|
자바스터디 7주차 (2) (0) | 2021.06.23 |
자바스터디 6주차 (2) (0) | 2021.06.19 |
자바스터디 6주차 (1) (0) | 2021.06.15 |
자바스터디 5주차 (2) [스터디관리 프로그램 구현] (0) | 2021.06.13 |
댓글