[자바] java.util - java.time 패키지

Gammi·2022년 11월 29일
0

JAVA

목록 보기
30/35

📚 java.time 패키지


  • 날짜 및 시각 정보 관리 기능 패키지

  • LocalDate 클래스 : 날짜 관련 기능 제공

  • LocalTime 클래스 : 시각 관련 기능 제공

  • LocalDateTime 클래스 : 날짜 및 시각 관련 기능 제공


  • toString() 메서드 오버라이딩 되어 있음

  • now 메서드 호출하여 현재 시스템 정보 가져오고, of 메서드 호출하여 날짜 및 시각 정보 설정 가능

  • getXXX() 메서드 호출하여 항목별 정보 가져옴

    -> XXX : 가져올 정보 종류


import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class A {
  public static void main(String[] args) {
	LocalDate date = LocalDate.now();
	System.out.println(date); 
    // 2022-11-29 : 오늘 날짜 출력됨
		
	LocalTime time = LocalTime.now();
	System.out.println(time); 
    // 16:00:18.271361700 : 시스템 시각 정보 리턴받음
		
	LocalDateTime datetime = LocalDateTime.now();
	System.out.println(datetime); 
    // 2022-11-29T16:00:56.414298700 : 날짜 시각 정보 리턴받음
  }
}



📕 of( )


  • 정보 설정

LocalDate date = LocalDate.of(1998, 6, 18); // 연, 월, 일시 저장
System.out.println(date);
LocalTime time = LocalTime.of(8, 34, 1); // 시, 분, 초 저장
System.out.println(time);

LocalDateTime datetime = LocalDateTime.of(2002, 3, 5, 12, 46, 34);
// 연, 월, 일, 시 한번에 저장해도 되고
System.out.println(datetime);	
LocalDateTime datetime2 = LocalDateTime.of(date, time);
// 아까 만들어둔 date와  time 써도 된다!
System.out.println(datetime2);

📕 getXXX( )


  • 항목별 정보 가져오기

int year = date.getYear();
int month = date.getMonthValue();
// getMonthValue() 사용해야 함!
// getMonth()는 Month 타입 객체가 리턴됨!
int day = date.getDayOfMonth();

System.out.println(year + "/" + month + "/" + day);

int hour = time.getHour();
int min = time.getMinute();
int sec = time.getSecond();

System.out.println(hour + ":" + min + ":" + sec);





📓 Month 타입 객체 활용


  • enum 타입 객체인 Month 타입으로 관리

    -> 각 월의 이름이 상수로 제공됨


Month month = date.getMonth(); 
System.out.println(month); // toString() 생략됨
String monthName = month.toString();
// 변수에 저장할 때는 꼭 toString() 붙어야 함!
System.out.println(monthName);

Month 객체를 영어식 표현, 한국식 표현으로 변환

⭐ 영어로 변환

System.out.println(month.getDisplayName(TextStyle.SHORT, Locale.ENGLISH));
System.out.println(month.getDisplayName(TextStyle.FULL, Locale.ENGLISH));
System.out.println(month.getDisplayName(TextStyle.NARROW, Locale.ENGLISH));

📌 출력

Jun // short
June // full
J // narrow

⭐ 한국어로 변환

System.out.println(month.getDisplayName(TextStyle.NARROW, Locale.KOREA));
System.out.println(month.getDisplayName(TextStyle.FULL, Locale.KOREA));
System.out.println(month.getDisplayName(TextStyle.SHORT, Locale.KOREA));

📌 출력

6월
6월
6월
// 한국어는 다 똑같이 출력됨





📗 날짜 및 시각 정보 연산


  • plusXXX()minusXXX() 메서드 활용하여 연산 가능

LocalDate today = LocalDate.now();

System.out.println(today.plusMonths(2));
// 현재 날짜로부터 2개월 지난 날짜 리턴
System.out.println(today.plusDays(4));
// 현재 날짜로부터 4일 지난 날짜 리턴
System.out.println(today.minusDays(20));
// 현재 날짜로부터 20일 전의 날짜 리턴

System.out.println(today.plusMonths(1).plusDays(23));
// 두 개 연결해서 사용도 가능



📗 날짜 및 시각 정보 비교


  • compareTo() : 현재 객체 날짜가 대상 객체보다 이전이면 음수, 이후면 양수, 같으면 0 리턴

  • isAfter() : 설정된 날짜가 현재 날짜보다 미래인지 판별

  • isBefore() : 설정된 날짜가 현재 날짜보다 과거인지 판별

  • isEqual() : 설정된 날짜가 현재 날짜와 동일한지 판별


LocalDate date2 = LocalDate.of(2000, 1, 1);
LocalDate date3 = LocalDate.now();

System.out.println(date2.compareTo(date3)); // -22 
System.out.println(date2.isAfter(date3)); // false
System.out.println(date2.isBefore(date3)); //true
System.out.println(date2.isEqual(date3)); //false

  • until() : 두 객체 간의 날짜 및 시간 차이 게산

  • 파라미터로 대상 객체와 항목 정보 지정

    -> 항목 정보는 ChronoUnit 객체(enum타입)의 XXX 상수 사용


long result = date2.until(date3, ChronoUnit.YEARS); // 년도 차이 계산
System.out.println(result); 

long result2 = date2.until(date3, ChronoUnit.MONTHS); // 월 차이 계산
System.out.println(result2);

long result3 = date2.until(date3, ChronoUnit.DAYS); // 일 차이 계산
System.out.println(result3);





📚 날짜 및 시각 정보 형식화(Formatting)


  • 날짜 또는 시각 정보를 원하는 형식으로 변환

  • SimpleDateFormat 클래스 : Date 타입 객체에 대한 형식화

  • DateTimeFormatter 클래스 : LocalXXX 타입 객체에 대한 형식화




📕 형식 문자


기호의미표현
y연도yyyy, yy2022, 22
MMMM, MM02월, 02
ddd03
E요일EEEE, E화요일, 화
H시(24시)HH15
K시(12시)KK3
mmm02
sss34
a오전 / 오후a오전 또는 오후





  1. SimpleDateFormat 클래스 사용
  • SimpleDateFormat 인스턴스 생성 후 파라미터로 패턴 문자열 전달

Date today = new Date();
System.out.println(today);
// 기본 표현 형식으로 출력됨
// Tue Nov 29 17:23:01 KST 2022

String pattern = "yyyy년 MM월 dd일 EEEE";
// 형식 지정 문자를 사용해서 패턴 문자열 생성
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
// SimpleDateFormat 인스턴스 생성해서 파라미터로 패턴 문자열 전달
System.out.println(sdf.format(today));
// 2022년 11월 29일 화요일
// 형식에 맞게 변환됨
String formatToday = sdf.format(today);
// String 타입 변수에 저장 가능
		
pattern = "yyyy/MM/dd(E) a HH:mm:ss";
SimpleDateFormat sdf2 = new SimpleDateFormat(pattern);
System.out.println(sdf2.format(today));
// 2022/11/29(화) 오후 17:23:01



  1. DateTimeFormatter 클래스 사용
  • ofPattern() 메서드 호출하여 파라미터로 패턴 문자열 전달

  • 패턴 문자열은 SimpleDateFormat 클래스와 동일하게 사용

  • LocalTimeLocalDate 클래스 사용 시 패턴 문자열이 존재하지 않는 정보를 포함하지 않도록 해야함

  • format() 메서드 호출해서 파라미터로 DateTimeFormatter 객체 전달


LocalDateTime now = LocalDateTime.now();
System.out.println(now);
// 기본 표현 형식으로 출력됨
// 2022-11-29T17:31:18.983273600
String pattern = "yyyy/MM/dd(E) a HH:mm:ss";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
System.out.println(now.format(dtf));
// 2022/11/29(화) 오후 17:32:32
profile
개발자가 되었어요⭐️

0개의 댓글