ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 학원 DAY20. Date, Calendar, Format, Math 클래스
    기록 2022. 10. 4. 01:21

    Date클래스

    • 시스템의 현재 날짜와 시간정보를 표현하는 클래스다.
    • java.util 패키지에 있다.

     

    주요 생성자

    • new Date()
      • 현재 날짜와 시간정보가 포함된 객체가 생성된다.
    • new Date(long unixTime)
      • 지정된 유닉스타임에 해당하는 날짜와 시간정보가 포함된 객체가 생성된다.
     // 시스템의 현재 날짜정보와 시간정보가 포함된 Date객체가 생성된다.
      Date now = new Date();
      
      // 지정된 유닉스타임(long값)에 해당하는 날짜와 시간정보가 포함된 객체가 생성된다.
      Date date = new Date(0);    

    주요 메소드

    • boolean after(Date when)
      • 지정된 날짜보다 이후 날짜인지 확인한다.
    • boolean before(Date when)
      • 지정된 날짜보다 이전 날짜인지 확인한다.
    • int compareTo(Date other)
      • 지정된 날짜와 순서를 비교한다.
      • Comparable이라는 인터페이스 안에 있는 메소드이다.
      • Date 객체의 날짜와 시간정보가 other보다 이전이면 0보다 작은 정수
      • Date 객체의 날짜와 시간정보가 other보다 이후면 0보다 큰 정수
      • Date 객체의 날짜와 시간정보가 other과 같으면 0을 반환한다.
    • long getTime()
      • 유닉스타임을 반환한다.

    Calendar 클래스

    • 날짜와 시간정보 및 다양한 정보를 표현하는 추상 클래스다. (추상클래스로는 객체를 생성할 수 없다.)
    • java.util 패키지에 있다.
    • Calendar라는 추상클래스를 구현해서 태양력, 음력, 이슬람역,유대력을 만들었음. 달력끼리 대부분 같고 몇개만 다르기 때문에 인터페이스가 아닌 추상클래스로 만들었다.
    • Calendar클래스를 구현한 대표적인 클래스는 GregorianCalendar(서력기원 태양력)이다. (자바에서는 only 그레고리안 캘린더만 있음.) 

     

    주요 API
    정적 메소드
     Calendar.getInstance()  : 시스템의 지역, 시간 정보를 바탕으로 현재 날짜와 시간정보를 포함하는 Calendar객체(실제로 생성되는 객체는 GregorianCalendar다.)를 반환한다.

    * MONTH=8은 9월이다. 컴퓨터에서 1월이 0이기 때문이다. ('월'에만 해당)

    * WEEK_OF_MONTH : 이번달에서 몇번째 주인지 나타냄

     

    멤버 메소드
     int get(int field)
     *  지정된 필드에 해당하는 정보를 반환한다.
     *  field값은 상수로 정의되어 있다.
          Calendar.YEAR                     년도
          Calendar.MONTH                 월, 월은 0부터 시작한다
          Calendar.DAY_OF_MONTH 일
          Calendar.HOURS                 시
          Calendar.MINUTE                분
          Calendar.SECOND              초
          Calendar.DAY_OF_WEEK  요일(숫자)


    void set(int field, int value)
     *  지정된 필드에 해당하는 값을 변경한다.
    void set(int year, int month, int dayOfMonth)
     *  지정된 날짜에 해당하는 값으로 변경된다.
    void setTime(Date date)
     *  전달받은 Date객체로 날짜와 시간정보가 변경된다.
    Date getTime()
     *  Calendar객체의 날짜와 시간정보와 동일한 정보를 가지는 Data객체를 반환한다.
    long getTimeInMillis()
     *  Calendar 객체의 날짜와 시간정보에 해당하는 유닉스 타입값을 반환한다.


    Format 클래스

    SimpleDateFormat 클래스 (java.text.SimpleDateFormat)

    데이터베이스의 날짜와 시간정보를 가져오면 자바의 Date타입으로 획득된다. 그런데 자바의 Date클래스는 유닉스타임을 반환하기 때문에 패턴문자를 사용해서 우리가 원하는 정보를 획득할 수 있다.

     *  Date를 지정된 포맷을 문자열로 반환한다.
     *  지정된 패턴으로 작성된 문자열을 Date로 변환한다.
     

    주요 API
    생성자
    SimpleDateFormat()
    SimpleDateFormat객체를 생성한다.
    SimpleDateFormat(String pattern)  // 패턴을 바꿀 일이 없으면 이걸로 쓴다.
    지정된 패턴을 가진 SimpleDateFormat객체를 생성한다.

     

    멤버메소드
    void applyPattern(String pattern)
    SimpleDateFormat객체의 패턴을 적용한다.
    String format(Date date)
    Date객체의 날짜와 시간정보를 지정된 패턴의 문자열로 반환한다.
    Date parse(String text)
    지정된 패턴으로 작성된 문자열을 분석해서 Date객체로 반환한다.

    주요 패턴문자 (암기 필요)
    Y    year                                yyyy -> 2022   yy -> 22
    M   Month                             M -> 9    MM -> 09
    d    day in month                   d -> 23    dd -> 23
    E   day name(요일)               EEEE -> 금요일   EEE -> 금
    a   am/pm                              a -> 오전/오후
    h   hour in am/pm (1~12)       h -> 1         hh -> 01
    H  hour in day (0~23)
    m  minute
    s   second
    S  millisecond

    package day21.format;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class DeteFormatApp {
    
    	public static void main(String[] args) throws Exception { 
    			
    		Date now = new Date();
    		
    		SimpleDateFormat sdf = new SimpleDateFormat();
    		// SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 M월 d일"); <- 패턴이 바뀌지 않을거라면 이렇게 써도 된다.
    		
    // Date객체의 날짜와 시간정보를 지정된 패턴의 문자열로 변환하기			
    		sdf.applyPattern("yyyy-MM-dd");
    		String text1 = sdf.format(now);
    		System.out.println("[yyyy-MM-dd] " + text1);
    		
    		sdf.applyPattern("yyyy-M-d");
    		String text2 = sdf.format(now);
    		System.out.println("[yyyy-M-d] " + text2);
    		
    		sdf.applyPattern("yyyy년 M월 d일");
    		String text3 = sdf.format(now);
    		System.out.println("[yyyy년 M월 d일]" + text3);
    		
    		sdf.applyPattern("yyyy년 M월 d일 EEEE");
    		String text4 = sdf.format(now);
    		System.out.println("[yyyy년 M월 d일 EEEE]" + text4);
    
    		sdf.applyPattern("a h:m:s");
    		String text5 = sdf.format(now);
    		System.out.println("[a h:m:s] " + text5);
    		
    		sdf.applyPattern("a hh:mm:ss");
    		String text6 = sdf.format(now);
    		System.out.println("[a hh:mm:ss] " + text6);
    		
    		sdf.applyPattern("a h시 m분 s초");
    		String text7 = sdf.format(now);
    		System.out.println("[a h시 m분 s초] " + text7);
    		
    		sdf.applyPattern("yyyy년 M월 d일 EEEE a h시 m분 s초");
    		String text8 = sdf.format(now);
    		System.out.println("[yyyy년 M월 d일 EEEE a h시 m분 s초] " + text8);
    		
    // 지정된 패턴으로 작성된 문자열을 분석해서 Date객체로 변환하기
    		sdf.applyPattern("yyyy-MM-dd"); 
    		Date birth = sdf.parse("1973-04-11");
    		System.out.println(birth);
    		
    	}
    }


    DecimalFormat 클래스 (java.text.DecimalFormat)

    *  숫자로 지정된 포맷을 문자열로 변환한다.
    *  지정된 패턴으로 작성된 문자열을 숫자로 변환한다.

    주요 API
    생성자
    DecimalFormat()

    DecimalFormat객체를 생성한다.
    DecimalFormat(String pattern)
    지정된 패턴이 적용된 DecimalFormat 객체를 생성한다.

     

    멤버메소드
    void applyPattern(String pattern)
    DecimalFormat객체에 지정된 패턴을 적용한다.
    String format(long number)
    정수를 지정된 패턴의 문자열로 반환한다.
    String format(double number)
    실수를 지정된 패턴의 문자열로 변환한다.
    Number Parse(String text)
    지정된 패턴으로 작성된 문자열을 Number객체로 변환한다.
    Number객체는 intValue(), longValue(), doubleValue() 등을 가지고 있다.
    int Parse(String text) // 메소드중복정의가 안되서 안됨.

     

    주요 패턴 문자

    #   숫자하나
    0   숫자하나
    -   마이너스 부호

    ,   자릿수
    .   소숫점

    package day21.format;
    
    import java.text.DecimalFormat;
    
    public class DecimalFormatApp {
    
    	public static void main(String[] args) throws Exception {
    		
    //숫자를 지정된 패턴의 문자열로 변환하기
    		DecimalFormat df = new DecimalFormat();
    		
    		// 소숫점이 없는 정수로 표현하고, 3자리마다 ,를 추가한다.
    		df.applyPattern("#,###");
    		String text1 = df.format(1000000);
    		System.out.println("[#,###]" + text1);  // 1,000,000
    		
    		df.applyPattern("0,000");
    		String text2 = df.format(123456789);
    		System.out.println("[0,000]" + text2);	// 123,456,789
    		
    		// 소숫점 3번째자리에서 반올림해서 문자열로 표현해라.
    		df.applyPattern("#,###.##");
    		String text3 = df.format(123.4578);
    		System.out.println("[#,###.##]" + text3);   // 123.46
    		
    		// 소숫점 3번째자리에서 반올림해서 소숫점 2번째까지 문자열로 표현해라. 지정된 소숫점자리보다 소숫점자리가 적으면 없는 부분은 표시하지 마라.
    		df.applyPattern("#,###.##");
    		String text4 = df.format(123.4);
    		System.out.println("[#,###.##]" + text4);   // 123.4
    		
    		// 소숫점 3번째자리에서 반올림해서 소숫점 2번째까지 문자열로 표현해라. 지정된 소숫점자리보다 소숫점자리가 적어도 0으로 표시한다.
    		String text5 = df.format(123.4);
    		System.out.println("[#,###.##]" + text5);   // 123.40
    		
    		double average = 220/3.0;
    		String text6 = df.format(average);
    		System.out.println("평균점수: " + text6);  // 73.33
    		
    // 문자열을 숫자로 변환하기
    		/*
    		 * "1234" 	Integer.parseInt("1234") -> 1234
    		 * "3.14" 	Double.parseDouble("3.14") -> 3.14
    		 * 
    		 * 아래에는 숫자형식이 아니라서(숫자가 아닌 성분,가 들어있어서) DecimalFormat을 써야함.
    		 * "1,000,000"		DecimalFormat객체의 parse("1,000,000") -> Number객체의 intValue() -> 1000000
    		 * "1,000,000.23" 	DecimalFormat객체의 parse("1,000,000.23") -> Number객체의 doubleValue() -> 1000000.23
    		 */
    		
    		df.applyPattern("#,###");
    		Number number1 = df.parse("10,000,000");
    		int value1 = number1.intValue();  // value1은 10000000
    		System.out.println(value1);
    	}
    }

    Math 클래스(java.lang.Math)

    * 수학연산과 관련된 기능을 제공하는 유틸클래스

    * 모든 필드와 모든 메소드가 정적필드, 정적메소드다.

     

    주요 API

    static int abs(int value)
    절대값을 반환한다.
    static int min(int a, int b)
    더 작은 값을 반환한다.
    static int max(int a, int b)
    더 큰 값을 반환한다.
    static long round(double a)
    실수를 일의 자리까지 반올림해서 반환한다.
    static double ceil(double a)
    천정값을 반환한다.
    1 < x <= 2 x가 이 범위일 때 ceil(x)는 2.0이다.
    static double floor(double a)

    바닥값을 반환한다.
    1 <= x < 2 x가 이 범위일 때 floor(x)는 1.0이다.
    static double random();
    0.0보다 크거나 같고, 1.0보다 작은 임의의 실수를 반환한다. 난수를 반환한다.
    0.0 <= x < 1.0 범위의 실수값을 반환한다.
    (int)Math.random()는 0부터 N-1까지의 숫자중에서 임의의 숫자가 반환된다.
    (int)(Math.random()*N + 1)는 1부터 N까지의 숫자중에서 임의의 숫자가 반환된다.

    package day21.math;
    
    import java.util.Arrays;
    
    public class MathApp {
    
    	public static void main(String[] args) {
    	
    		System.out.println("### round() 메소드");
    		System.out.println(Math.round(1.3));   // 1
    		System.out.println(Math.round(1.5));   // 2
    		System.out.println(Math.round(1.6));   // 2
    		
    		System.out.println("### ceil() 메소드");
    		System.out.println(Math.ceil(1.3));    // 2.0
    		System.out.println(Math.ceil(1.5));    // 2.0
    		System.out.println(Math.ceil(1.6));    // 2.0
    		
    		System.out.println("### floor() 메소드");
    		System.out.println(Math.floor(1.3));    // 1.0
    		System.out.println(Math.floor(1.5));    // 1.0
    		System.out.println(Math.floor(1.6));    // 1.0
    		
    		System.out.println("### random() 메소드");     // 로또, 테트리스 등에서 쓰임
    		System.out.println((int) (Math.random()*45 + 1));
    		System.out.println((int) (Math.random()*45 + 1));
    		System.out.println((int) (Math.random()*45 + 1));
    		System.out.println((int) (Math.random()*45 + 1));
    		System.out.println((int) (Math.random()*45 + 1));
    		System.out.println((int) (Math.random()*45 + 1));
    		
    		int[] numbers = new int[10];
    		for (int i=0; i<10; i++) {
    			int number = (int)(Math.random()*100 + 1);
    			numbers[i] = number;
    		}
    		System.out.println(Arrays.toString(numbers));
    		
    		int[] numbers2 = new int[10];
    		for (int i=0; i<10; i++) {
    			int number = ((int)(Math.random()*100/10 + 1))*10;
    			numbers2[i] = number;
    		}
    		System.out.println(Arrays.toString(numbers2));
    		
    	}
    }

    <결과>

    댓글

Designed by Tistory.