단편적인 날짜 정보를 얻을 때.
추상클래스이므로 객체화가 되지 않는다.
1. 객체 생성
객체를 얻는 method 사용
Calendar cal = Calendar.getInstance();
자식클래스 사용.
Calendar cal2 = new GregorianCalendar();
2. method사용
년, 월, 일 등의 정보를 get()에 constant를 할당하여 얻는다.
* 년
int year = cal.get(Calendar.YEAR); //가독성향상
int year = cal.get(1);//가독성 좋지 않음.
* 월
int month = cal.get(Calendar.MONTH)+1;//월은 0월부터 시작 0~11월
* 일
int day = cal.get(Calendar.DAY_OF_MONTH);//오늘 얻기
sb.append(cal.get(Calendar.DAY_OF_MONTH)).append("일");//한줄로 작성가능
* 오늘이 올해의 몆번째 날인지 구하기
cal.get(Calendar.DAY_OF_YEAR)
* 요일
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
* 오전/오후
int amPm = cal.get(Calendar.AM_PM); //오전 - 0, 오후 - 1
* 시
int hour =cal.get( Calendar.HOUR);// 12시간
int hour =cal.get( Calendar.HOUR_OF_DAY);// 24시간
* 분
int minute = cal.get( Calendar.MINUTE );
* 초
int second=cal.get( Calendar.SECOND );
1. 생성
Calendar cal = Calendar.getInstance();
2. 특정 날짜정보를 변경 - 설정한 날짜정보만 변경, 다른 정보는 그대로.
cal.set(필드, 변경할 값);
* 년
cal.set(Calendar.YEAR, 2025);//2025-01-22
* 월 (사람이 사용하는 월보다 -1 설정) //1을 입력하면 2월이 나옴.
cal.set(Calendar.MONTH, 1); //2025-02-22
* 일(현재 월에 없는 일이 설정되면 다음달 1일로 출력한다.)
cal.set(Calendar.DAY_OF_MONTH, 30); //2025-02-30 => 2025-03-01
1. 객체 생성을 직접할 수 없다.
* now() - static method(시스템 현재 시간)
LocalDate ld = LocalDate.now();
LocalTime lt = LocalTime.now();
LocalDateTime ldt = LocalDateTime.now();
* of() - static method(개발자가 원하는 시간으로 객체 얻을 수 있다.)
LocalDate ld = LocalDate.of(년,월,일);
LocalTime lt = LocalTime.of(시,분,초);
LocalDateTime ldt = LocalDateTime.of(년,월,일,시,분,초);
LocalDateTime ldt = LocalDateTime.of(LocalDate, LocalTime);
---------------------------------------------------------------
2. method 호출
LocalDate(시간관련 method 제공안함)
- 년
int year = ld.getYear();
- 월(1~12월)
int month = ld.getMonthValue();
- 일
int dayOfMonth = ld.getDayOfMonth();
- 요일
반환형 : Enumeration
ld.getDayOfWeek() - 요일
ld.getDayOfWeek().getValue(); - enum이 가진 상수의 요일 숫자
(getValue()은 enum에서 제공하는 method)
-시
int hour = lt.getHour();//24
-분
int minute = lt.getMinute();//24
-초
int second = lt.getSecond();//24
1. 생성) - 안됨
객체를 얻는 ofPattern method 사용.
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("패턴", Locale);
2. LocalDate객체나 LocalDateTime객체의 method를 호출
String dateFormat = ld.format(dtf);
(패턴이 설정된 날짜가 문자열로 반환.)
method를 호출하여 변환할 날짜를 설정하고, 자신 객체에 재할당하여 사용.
widthXxxx(), plusXxx(), minusXxx()
- 년 변경
ld = ld.withYear((현재 년도에서) 변경할 년도);
ld = ld.plusYear(더할 년도);
ld = ld.minusYear(뺄 년도);
isAfter, isBefore, isEqual
### 문법
LocalDate ld = LocalDate.now();//2024,1,22 전날
LocalDate ld2 = LocalDate.of(2024,1,23); //이후
// 현재날짜.isAfter( 비교할 날짜 );
ld.isAfter(ld2); //ld날이 ld2보다 다음날인가 : false
ld.isBefore(ld2); //ld날이 ld2보다 전날인가 : true
ld.isEqual(ld2); //ld날이 ld2과 같은 날인가 : false
period 클래스 사용.
LocalDate를 사용한 날짜 비교 가능.
1. 날짜를 가진 객체얻기
LocalDate ld = LocalDate.of(2023,12,22);
LocalDate ld2 = LocalDate.of(2024,1,22);
2. 날짜 연산을 위한 객체얻기
period p = Period.between(ld, ld2);
3. 각 날짜별 차이 얻기(각 날짜 끼리만 연산, 전체(년,월,일)을 연산하지 않음.)
* 년도 차
p.getYears()
System.out.println(ld.getYear() + "년과 " + ld2.getYear() +
"년의 차 : " + p.getYears() + "년");
* 월 차
p.getMonths();
* 일 차
p.getDays();
숫자를 형식을 가진 문자열로 만들어 보여줄 때.
1. 생성
DecimalFormat df = new DecimalFormat( pattern );
(pattern =>
0 : 해당자리에 데이터가 없으면 0을 채워서 출력.
\# : 데이터가 존재하는 것 까지만 출력.)
2. method 출력
String value = df.format(숫자);
DecimalFormat df = new DecimalFormat( "0,000,000" )
System.out.println( df.format( 2024 ) ); //0,002,024
DecimalFormat df = new DecimalFormat( "#,###,###" )
System.out.println( df.format( 2024 ) ); //2,024
DecimalFormat df = new DecimalFormat( "0,000,000.00" )
System.out.println( df.format( 2024.1234 ) ); //0,002,024.12
난수를 추출할 목적으로 만들어진 클래스
1. 객체화 - 난수의 셋이 만들어짐
Random r = new Random();
Random r = new Random(seed);
2. method 호출
정수의 난수 얻기
r.nextInt(); // -2147483648 ~ +2147483648 사이의 값이 나옴
Math.abs(r.nextInt() % 범위)
r.nextInt(범위)
실수의 난수 얻기
r.nextFloat()
r.nextDouble()
범위
(int)(r.nextDouble() * 범위)
* 불린 난수
r.nextBoolean();
열거형
한정된 개수의 값들을 하나로 묶어서 사용할 때.
변형된 클래스의 일종(클래스의 성격을 가짐)
(변수를 가짐, 생성자-private한정(method를 가질 수 있다.))
1. 선언
접근지정자 enum 이넘명{
값,,,,, <= 상수이므로 대문자로 기술
}
1) 모든 값 출력
values() method 사용
(enum 객체안의 모든 상수가 열거형으로 나온다.)
for(이넘명 객체명 : 이넘명.values()){
}
2) 특징 요소 하나 얻을 때
이넘명.요소명
3) 요소가 몇번째 값인지 얻을 때
ordinal()
이넘명.요소명.ordinal()
public enum Test{
A, B, C, D
}
4) 모든 값 얻기
for(Test t : Test.values()){
System.out.println(t);
}
5) 요소하나 출력
System.out.println(Test.A);
6) 번호 얻기
System.out.println(Test.A.ordinal());
enum의 요소에 이름과 별개의 값을 설정할 수 있음.
enum 생성자(private)
접근지정자 enum 이넘명 {
상수값("이름", 값),
상수값("이름", 값),
상수값("이름", 값);
//이름 저장용 변수
//값 저장용 변수
private final String name;
private final int value;
private 이넘명(String name, int value){
this.name = name;
this.value = value;
}//이넘명
public String getName(){
return this.name;
}//getName
public String getValue(){
return this.value;
}//getValue
}
이넘명 객체명 = 이넘명.요소;
객체명.getName();
객체명.getAge();