* Calendar
- 단편적인 날짜(년, 월, 일,,) 정보를 얻을 때 사용.
- 추상클래스 : 객체화가 되지 않는다.
1. 객체생성)
- 객체를 얻는 method 사용
Calendar cal = Calendar.getInstance();
- 자식 클래스를 사용
Calendar cal = 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); // 오늘 얻기
int dayOfYear = cal.get(Calendar.DAY_OF_YEAR); // 오늘이 이번 년의 몇 번째 날인지
// 요일 : 요일의 index가 반환
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
// 오전 : 0 , 오후 : 1
int amPm = cal.get(Calendar.AM_PM);
// 시간
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();
// cal : 시스템의 현재 날짜 : 2024-01-22
2. 특정 날짜 정보를 변경) - 설정할 날짜정보만 변경되고, 다른 정보는 그대로이다.
cal.set(필드, 변경할 값);
// 년
cal.set(Calendar.YEAR, 2025); // 2025-01-22
// 월 : 사람이 사용하는 월보다 -1 설정
cal.set(Calendar.MONTH, 1); // 2025-02-22
// 일 : 현재 월에 없는 일이 설정되면 다음 달 1일로 변경된다.
cal.set(Calendar.DAY_OF_MONTH, 30); // 2025-02-30 -> 2025-03-01
* java.time 패키지
- JDK 1.8에서부터 제공되는 패키지
- LocalDate : 날짜 정보만 가진 클래스
- LocalTime : 시간 정보만 가진 클래스
- LocalDateTime : 날짜와 시간 정보를 모두 가진 클래스
- Period : 두 날짜 간의 연산을 하기 위한 클래스
- Duration : 두 시간 사이의 연산을 하기 위한 클래스
- 사용법)
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는 제공X
// 년
int year = ld.getYear();
// 월(1~12월)
int month = ld.getMonthValue();
// 일
int dayOfMonth = ld.getDayOfMonth();
// 요일 - 반환형 : Enumeration
ld.getDayOfWeek() // 요일
ld.getDayOfWeek().getValue(); // enum DayOfWeek 에서 제공하는 method, enum이 가진 상수의 요일 숫자
// LocalTime : 날짜 관련 method는 제공X
// 시
int hour = lt.getHour(); // 24시간
// 분
int minute = lt.getMinute();
// 초
int second = lt.getSecond();
* 한글로 출력
- java.time.format.DateTimeFormatter 클래스를 사용.
- letter은 java.text.SimpleDateFormat과 같음.
사용법)
1. 생성 - 안됨
- 객체를 얻는 ofPattern method 사용
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("패턴", Locale);
2. LocalDate 객체나 LocalDateTime 객체의 method를 호출
String dateFormat = ld.format(dtf);
// parttern이 설정된 날짜가 문자열로 반환
* 날짜 변환
- method를 호출하여 변환한 날짜를 설정하고, 자신 객체에 재할당하여 사용.
- widthXxx(), plusXxx(), minusXxx()
- 년 변경
ld = ld.widthYear(변경할 년도);
ld = ld.plusYear(더할년도);
ld = ld.minusYear(뺄 년도);
* 날짜 비교
- isAfter, isBefore, isEqual
- 사용법)
LocalDate ld = LocalDate.now(); // 2024, 1, 22
LocalDate ld2 = LocalDate.of(2024, 1, 23); // 2024, 1, 23
// ld : 날짜, ld2 : 비교할 날짜
ld.isAfter(ld2); // false
ld.isBefore(ld2); // true
ld.isEqual(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();
// 월 차
p.getMonths();
// 일 차
p.getDays();
* DecimalFormat
- 숫자를 형식을 가진 문자열로 만들어 보여줄 때
1. 생성)
DecimalFormat df = new DecimalFormat(pattern);
2. method 호출)
String value = df.format(숫자);
// 0 : 해당 자리에 데이터가 없으면 0을 채워서 출력
// # : 데이터가 존재하는 것까지만 출력
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
* Random
- 난수를 추출할 목적으로 만들어진 클래스.
- 사용법)
1. 객체화) 난수의 셋이 만들어진다.
Random r = new Random(); // 랜덤
Random r = new Random(sedd); // 시드랜덤
2. method 호출)
// 정수의 난수 얻기
r.nextInt() // -2147483648 ~ +2147483647 사이의 값 중 하나가 나온다.
// 범위
Math.abs(r.nextInt() % 범위)
r.nextInt(범위)
// 실수의 난수 얻기
r.nextFloat()
r.nextDouble()
// 범위
(int)(r.nextDouble()*범위)
// 불린 난수
r.nextBoolean()
* Enum(Enumeration) - 열거형
- 한정된 개수의 값들을 하나로 묶어서 사용할 때
- 변형된 클래스의 일종(클래스의 성격을 가짐)
- 클래스의 성격: 변수를 가짐, 생성자(private 한정), method를 가질 수 있다.
// 선언
접근지정자 enum 이넘명{
값,,,,,, // 상수이므로 대문자로 기술
}
public enum Test{
A, B, C, D
//0, 1, 2, 3
}
// 모든 값 출력
values() method 사용 // enum 객체 안의 모든 상수가 열거형의 배열로 나온다.
for(이넘명 객체명 : 이넘명.values()){
}
for(Test t : Test.values()){
System.out.println(t);
}
// 특정 요소 하나 얻을 때
이넘명.요소명
System.out.println(Test.A);
// 요소가 몇 번째 값인지 얻을 때
ordinal()
이넘명.요소명.ordinal()
System.out.println(Test.A.ordinal());
* enum 생성자(private)와 method 정의
- enum의 요소에 이름과 별개의 값을 설정할 수 있다.
접근지정자 enum 이넘명{
요소명("이름", 값),
요소명("이름", 값),
요소명("이름", 값);
// 이름 저장용 변수
private final String name;
// 값 저장용 변수
private final int value;
private 이넘명(String name, int value){
this.name = name;
this.value = value;
}
public String getName(){
return name;
}
public int getValue(){
return value;
}
}
- 사용법)
이넘명 객체명 = 이넘명.요소;
객체명.getName();
객체명.getValue();