자바의정석 10장

서현우·2022년 3월 31일
0

자바의정석

목록 보기
10/22

ch 10-1 날짜와 시간

java.util.Date

  • 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK1.0)
  • Date의 메서드는 거의 deprecated되었지만, 여전히 쓰이고 있다.

java.util.Calendar

  • Date클래스를 개선한 새로운 클래스(JDK1.1). 여전히 단점이 존재

java.time패키지

  • Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK1.8)
    (LocalDate, LocalTime, LocalDateTime)

ch10-2 Calendar클래스

  • 추사클래스이므로 getInstance()를 통해 구현된 객체를 얻어야한다.
    (객체 생성 불가)
    Calendar cal = new Calendar(); //에러!!!
    Calendar cal = Calendar.getInstance(); //OK.
    //getInstance() 메서드는 Calendar클래스를 구현한 클래스의 인스터스를 반환.

Calendar: 1.서양력, 2.불교력, 3.일본력

Calendar cal = new GregorianCalendar();
//필요 할 때 변경해야하므로 getInstance()같은 메서드 사용이 더 좋다.

ch10-3 Calendar클래스 - 예제1

  • get()으로 날짜와 시간 필드 가져오기 - int get(int field)
Calendar cal = Calendar.getInstance(); //현재 날짜와 시간으로 셋팅됨
int thisYear = cal.get(Calendar.YEAR); //올해가 몇년인지 알아냄
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); //이 달의 마지막날
  • Calendar에 정의된 필드

    YEAR : 년
    MONTH : 월(0부터 시작)
    WEEK_OF_YEAR : 1월1일부터~지금까지 몇 번째 주인지
    WEEK_OF_MONTH : 그 달의 몇 번째 주
    DATE : 일
    DAY_OF_MONTH : 그 달의 몇 번째 일
    DAY_OF_YEAR : 그 해의 몇 번째 일
    DAY_OF_WEEK : 요일(1~7, 1:일요일)
    DAY_OF_WEEK_IN_MONTH : 그 달의 몇 번째 요일
    HOUR : 시간(0~11)
    HOUR_OF_DAY : 시간(0~23)
    MINUTE : 분
    SECOND : 초
    MILLSECOND : 천분의 일초
    ZONE_OFFSET : GMT기준 시차(천분의 일초 단위)
    AM_PM : 오전/오후

ch10-4,5 Calendar클래스 - 예제2,3

  • 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(2017, 7, 15); //2017년 8월 15일
date1.set(Calendar.YEAR, 2017); //2017년
...
  • 시간 지정하는 방법
Calendar time1 = Calendar.getInstance();
time1.set(Calendar.HOUR_OF_DAY, 10); //time1을 10시 20분 30초로 설정
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 30);
  • clear()는 Calendar객체의 모든 필드를 초기화
    --> (EPOCH TIME) 1970년 1월 1일 00:00:00
  • clear(int filed)는 Calendar객체의 특정 필드를 초기화

ch10-6,7 Calendar클래스 - 예제4,5

  • add()는 특정 필드의 값을 증가 또는 감소(다른 필드에 영향O)
    date.add(Calendar.DATE, 1); //날짜에 1을 더함
    date.add(Calendar.MONTH, -8); //월에서 8을 뺌

  • roll()은 특정필드의 값을 증가 또는 감소(다른 필드에 영향X)
    //add()와 달리 roll()은 다른 필드에 영향을 미치지 않는다.
    date.roll(Calendar.DATE, 1); //날짜에 1을 더한다.
    date.roll(Calendar.MONTH, -8); //월(MONTH)에서 8을 뺀다.

달력만들기

  1. 말일 구하기(다음달 1일 - 1일)
  2. 1일의 요일 구하기
  3. 토요일마다 줄바꿈

ch10-8 Date와 Calendar간의 변환

  • Date의 메서드는 대부분 deprecated되었지만 여전히 사용
  1. Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
...
Date d = new Date(cal.getTimeInMillis()); //Date(long date)
  1. Date를 Calendar로 변환
Date d = new Date();
...
Calendar cal = Calendar.getInstance();
cal.setTime(d)

ch 10-9 형식화 클래스

  • java.text패키지의 DecimalFormat, SimpleDateFormat
  • 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자, 날짜 -> 형식 문자열)
  • 형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식문자열 -> 숫자, 날짜)

ch 10-10 DecimalFormat

  • 숫자를 형식화할 때 사용(숫자->형식문자열)
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0"); //지수형식
String result = df.format(number); //result = "1.2E6"
  • 특정 형식의 문자열을 숫자로 변환할 때도 사용(형식 문자열->숫자)
DecimalFormat df = new DecimalFormat("#,###.##");
Number num = df.parse("1,234,567.89");
double d = num.doubleValue(); //1234567.89

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

ch10-13 SimpleDateFormat

  • 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다.
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("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("2015년 11월 23일");
String result = df2.format(d);
profile
안녕하세요!!

0개의 댓글