21.01.13-36일차

✍ 날짜와 시간 & 형식화


🙌 날짜와 시간

  • java.util.Date
    -> 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK1.0)
    -> Date의 메서드는 거의 deprecated(앞으로 사용 x)었지만, 여전히 쓰임.
  • java.util.Calendar
    -> Date클래스를 개선한 새로운 클래스(JDK1.1). 여전히 단점이 존재
    -> 날짜+시간을 같이 다루게 되있는 단점
  • java.time패키지
    -> Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK1.8)
    -> LocalDate(날짜), LocalTime(시간) 으로 나눔. 같이쓰려면 LocalDAteTime

👏 Calendar클래스

  • 추상 클래스이므로 getInstance( ) 를 통해 구현된 객체를 얻어야 한다.
Calendar cal = new Calendar( ); // 에러!!  추상클래스는 인스턴스 생성X
// OK. getInstance()메서드는 Calendar클래스를 구현한 클래스의 인스턴스를 반환
Calendar cal = Calendar.getInstance( );
  • get( ) 으로 날짜와 시간 필드 가져오기 - int get(int field)
Calendar cal = Calendar.getInstance( );  // 현재 날짜와 시간으로 셋팅됨
int thisYear = cal.get(Calendar.YEAR);  // 올해가 몇년인지 알아냄
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); // 이 달의 마지막날
  • Calendar에 정의된 필드
    (자바의정석 책 참고)
  • set()으로 날짜와 시간 지정하기
void set(int Field, int value)
void set(int year, int month, int date)
void set(int year, int month, int date, int hourOfDay, int minute)
void set(int year, int month, int date, int hourOfDay, int minute, int second)
  • 날짜 지정하는 방법. 월(month)이 0부터 시작한다는 점!
Calendar date1 = Calendar.getInstance();
date1.set(2021, 5, 9); // 2021년 6월 9일(5월 아님)
  • 시간을 지정하는 방법.
Calendar time1 = Calendar.getInstance();
// time1을 10시 20분 30초로 설정
time1.set(Calendar.HOUR_OF_DAY, 10);
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 30);
System.out.println(time1);
  • clear()는 Calendar객체의 모든 필드를 초기화
Calendar dt = Calendar.getInstance();
.
// Sun May 09 22:19:46 KST 2021
System.out.println(new Date(dt.getTimeInMillis()));
.		
dt.clear(); // 모든 필드를 초기화
//Thu Jan 01 00:00:00 KST 1970
System.out.println(new Date(dt.getTimeInMillis()));
  • clear(int field)는 Calendar객체의 특정 필드를 초기화
Calendar dt2 = Calendar.getInstance();
.
// Sun May 09 22:19:46 KST 2021
System.out.println(new Date(dt2.getTimeInMillis()));
.	
dt2.clear(Calendar.SECOND);  // 초를 초기화
dt2.clear(Calendar.MINUTE);	// 분을 초기화
dt2.clear(Calendar.HOUR_OF_DAY); // 시간을 초기화
dt2.clear(Calendar.HOUR);  // 시간을 초기화
.		
// Sun May 09 12:00:00 KST 2021
System.out.println(new Date(dt2.getTimeInMillis()));
  • add()는 특정 필드의 값을 증가 또는 감소(다른 필드에 영향O)
Calendar date = Calendar.getInstance();
date.clear(); // 모든 필드를 초기화
date.set(2021, 7, 31); // 2021년 8월 31일로 설정
.		
// 날짜(DATE)에 1을 더한다.
date.add(Calendar.DATE, 1); // 9월 1일
// 월(MONTH)에서 8을 뺸다
date.add(Calendar.MONTH, -8); // 1월 1일
  • roll()은 특정 필드의 값을 증가 또는 감소(다른 필드에 영향X)
date.set(2021, 7, 31); // 2021년 8월 31일로 설정
.		
// add()와 달리 roll()은 다른 필드에 영향을 미치지 않는다.
//날짜(DATE)에 1을 더한다. 월(MONTH)에 영향X
date.roll(Calendar.DATE, 1); // 8월 1일
// 월(MONTH)에서 8을 뺸다
date.roll(Calendar.MONTH, -8);

👏 형식화 클래스

  • java.text패키지의 DecimalFormat, SimpleDateFormat

👏 DecimalFormat

(자바의 정석 책)

  • 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자,날짜 -> 형식 문자열)
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number);
// 결과 = "1.2E6"
  • 형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식 문자열 -> 숫자,날짜)
DecimalFormat df = new DecimalFormat("#,###.##");
Number num = df.parse("1,234,567.89");
double d = num.doubleValue(); 
// 결과 = 1234567.89

참고: Integer.parseInt()는 콤마(,)가 포함된 문자열을 숫자로 변환 못함

👏 SimpleDateFormat

(자바의 정석 책)

  • 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다.
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
.
// 오늘 날짜를 yyyy-MM-dd 형태로 변환하여 반환
String result = df.format(today);
  • 특정 형식으로 되어있는 문자열에서 날짜와 시간을 뽑아 낼 수 있다.
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
.
Date d = df.parse("2021년 1월 13일"); // 문자열을 Date를 변환
String result = df2.format(d);

👏출처

자바의 정석 책 & 유튜브

좋은 웹페이지 즐겨찾기