1. LocalDate 클래스
자바 8버전부터 추가된 날짜 클래스
기본 형식: yyyy-MM-dd
- 메소드
- getYear(), getMonthValue(), getDayOfMonth(), getDayOfWeek()
- of(y, M, d): 특정 날짜 지정
- minusMonths(int) : 월에서 int만큼 빼기
2. LocalTime 클래스
자바8 버전부터 추가된 시간 클래스
- 메소드
- getHour() , getMinute()
- of(h, m, s) : 특정 시간 지정
3. LocalDateTime 클래스
자바8버전부터 추가된 날짜와 시간 클래스
- 메소드
- of(년, 월, 일, 시, 분, 초): 시간 지정
4. DayOfWeek 클래스
enum 타입으로 1주일 중 요일이 무슨 요일인지 알려주는 클래스
월(1) ~ 일(7)까지로 매칭되어있어서 .getValue()로 출력하게 되면 매칭 숫자도 얻어낼 수 있다.
5. ChronoUnit 클래스
Calender처럼 상수 변수가 선언되어 있음
- 메소드
- between(기준일, 현재날자 = LocalDate.now());
: 바로 기준일부터 현재날짜까지의 경과일을 알 수 있음
- between(기준일, 현재날자 = LocalDate.now());
//날짜 사이의 간격을 계산해주는 메소드: ChoronoUnit클래스 (int)
//날짜사이 간격 : ChronoUnit.DAYS.between(날짜, 날짜)
//월간 간격 : ChoronoUnit.MONTHS.between(날짜, 날짜)
LocalDate mj = LocalDate.of(1993, 11, 9);
long days = ChronoUnit.DAYS.between(mj, LocalDate.now());
//한번에 바로 경과일 알 수 있음.
System.out.println(days);
long months = ChronoUnit.MONTHS.between(mj, LocalDate.now());
System.out.println(months);
문자열 형태의 Date, Calendar 데이터 파싱하기
split() 메소드를 이용하여 파싱된 문자열을 String 배열에 저장, 출력
//날짜값이 문자열형태로 전달된 데이터 파싱하기 //web 날짜값은 yyyy-MM-dd가 기본 형태임 String enrollDate = "2024-02-13"; String[] data = enrollDate.split("-"); //GregorianCalendar는 매개변수 타입이 int이므로 Integer로 배열값들을 박싱 gc = new GregorianCalendar(Integer.parseInt(data[0]), Integer.parseInt(data[1])-1, Integer.parseInt(data[2])); // System.out.println(sdf.format((new Date(gc.getTimeInMillis()))));
2. 날짜 관련 클래스들 정리
java.sql.Timestamp
나노초를 포함한다
- java의 LocalDate type ↔ JDBC의 TimeStamp가 호환되는 클래스
- String → LocalDateTime → TimeStamp
java.util.Date
- 범용적인 날짜를 다룬다
- 년/월/일/시/분/초
- java8 이후 time패키지 사용권고
java.sql.Date
- JDBC등을 이용하여 디비에 격납된 날짜를 추출
- 년/월/일
java.time.LocalDate
- 훨씬 간결함
- 요즘 많이 사용되는 편
각 날짜 관련 클래스의 호환성
- java.util.Date → sql.Date → time.LocalDate
//util.Date -> sql.Date.toLocalDate 메소드 이용 -> LocalDate
LocalDate ld2 = new java.sql.Date(today.getTime()).toLocalDate(); //형변환
System.out.println(ld2);
- LocalDate → sql.Date
//Local date instance
LocalDate localDate = LocalDate.now();
//Get LocalDate from SQL date
java.sql.Date sqlDate = java.sql.Date.**valueOf(localDate)**;
System.out.println( sqlDate ); //2022-01-15
- sql.Timestamp → time.LocalDate
//객체 이용해서 객체의 toLocalDateTime 메소드 이용
LocalDateTime ldt2 = new Timestamp(new Date().getTime()).toLocalDateTime();
- sql.Timestamp →
util.Date(지양)
//java.sql.Timestamp 클래스 이용
Date ldtconvert = Timestamp.valueOf(ldt);
- java.sql.Date →
util.Date(지양)
//sql.Date의 valueOf 이용해서 데이터 추출하여 대입
//전달받은 문자열을 Date로 변환해줌
Date todayConvert = java.sql.Date.valueOf(ld);
util.Date(지양)→ sql.Date
//getTime()을 통해 밀리초를 추가하여 sql.Date 객체 생성하기
Date utilDate = new Date();
long milliSeconds = utilDate.getTime();
Date sqlDate = new Date(miliSeconds);
System.out.println(utilDate); // 결과: Tue Jan 31 03:54:37 KST 2023
System.out.println(sqlDate); // 결과: 2023-01-31
3. String 데이터로 날짜 적용하기
String → utill.Date
- SimpleDateFormat을 이용하여 형식 지정해주기
- 형식에 맞춰서 문자열을 변환하기
while(true) {
System.out.print("고용일(yyyymmdd) : ");
String dateStr= sc.next();
sc.nextLine();
SimpleDateFormat format = new SimpleDateFormat("yyyy/mm/dd");
try {
Date date = format.parse(dateStr);
e.setHireDate(date);
} catch (ParseException e1) {
System.out.println("잘못된 형식입니다. 다시 입력해주세요.");
continue;
}
break;
}
String → LocalDateTime
- DateTimeFormatter를 이용하여 형식 지정해주기(필요시)
- 지정 없을 시 문자열을 자동 yyyy-mm-dd 형식에 맞춰서 변환
//입력받기
System.out.print("고용일(yyyy-mm-dd) : ");
String dateStr= sc.next();
sc.nextLine(); //버퍼 비워주기
//parse는 yyyy-mm-dd 형식의 문자열을 수용한다. 메소드 내에서 DateTimeFormatter가 적용되기 때문
LocalDateTime date = LocalDateTime.parse(dateStr);
//원하는 형식이 있다면 DateTimeFormatter를 이용해 변수에 저장한 뒤 2번째 매개변수로 추가해주면 된다.
//SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
//LocalDateTime date = LocalDateTime.parse(dateStr, format);
e.setHireDate(date);
String → LocalDateTime → TimeStamp
- String 으로 받은 데이터를 LocalDateTime으로 저장
- localDateTimeToTimeStamp(데이터) 메소드로 TimeStamp 변환
//자바의 LocalDateTime 데이터 타입을 DB에 insert할 때 필요
public static Timestamp localDateTimeToTimeStamp(LocalDateTime ldt) {
return Timestamp.valueOf(ldt); // 2018-07-26 01:06:55.323
}
//DB의 TimeStamp 데이터 타입을 Java로 select하여 가져올 때 필요
public static LocalDateTime timeStampToLocalDateTime(Timestamp ts) {
return ts.toLocalDateTime(); // 2018-07-26T01:20:07.364
}
반응형