Exp/Java & Java Script

[Java] 자바로 날짜 구하기

kilog 2024. 4. 10. 20:32
728x90

안녕하세요 ki입니다.

이번 Exp는 자바로 Date 구하기입니다. 

금융권 프로젝트를 하면서 제일 중요하고 많이 들었던 말이 "영업일"입니다.

영업일은 간단하게 주말, 휴일, 공휴일을 말합니다.

저 같은 경우는 문서발급 시 영업일을 체크하거나 당일 동안 은행 계좌가 잠겨지는 잔액증명서 개발을 하면서 

영업일을 이용한 개발을 했습니다.

 

Java 날짜 패키지


자바에서 날짜 관련 패키지는

대표적은로 java.util.Date, java.util.Calendar, java.time.* 등이 있습니다.

 

 java.util.Date는 자바 1.0 버전 부터 출시 

java.util.Calendar는 자바 1.1 버전부터 출시

java.time 패키지는 java8 버전 이후부터 출시

 

time 패키지 더욱 사용하기 쉽고 편리해서 자주 사용하고 있습니다.

 

 

 

Date 패키지


import java.util.Date;

Date date = new Date();

date.Date() 
// 현재 날짜와 시간으로 Date 객체 생성

date.Date(long date) 
// 1970년 1월 1일 00:00:00 생성

date.getTime():  
// 1970년 1월 1일 00:00:00 밀리초 단위의 시간 반환

date.setTime(long time): 
// Date 객체의 시간을 지정된 밀리초 단위의 시간을 설정

date.toString(): 
// 현재 Date 객체의 문자열을 반환

 

 

 

Calendar 패키지


import java.util.Calendar;

// 추상클래스인 calendar는 인스턴스 생성 할 수 없습니다.
// 현재 로컬의 시간대와 설정으로 새로운 Calendar 객체를 생성

Calendar cal = Calendar.getInstance();

cal.get(Calendar.MONTH) 
// 해당 월을 반환

cal.set(int field, int value) 
// 지정된 필드의 값을 설정

cal.add(int field, int amount) 
// 지정된 필드의 값을 주어진 양만큼 증가 또는 감소

cal.getTime() 
// Date 객체로 현재의 날짜와 시간을 반환

cal.setTime(Date date) 
// Date 객체에서 날짜와 시간을 설정

cal.setTimeInMillis(long millis) 
// 지정된 밀리초 시간으로 날짜와 시간을 설정

cal.isLeapYear(int year) 
// 주어진 연도가 윤년(윤달)인지 여부를 확인

cal.getActualMaximum(int field) 
// 지정된 필드의 최대 값을 반환

cal.get(Calendar.MONTH) 
// ex 월의 최대 일 수를 반환


getInstance() 
// 현재 로컬의 시간대와 설정으로 새로운 Calendar 객체 생성

getInstance(TimeZone zone) 
// 지정된 시간대와 설정으로 새로운 Calendar 객체 생성

getInstance(Locale aLocale) 
// 지정된 로케일로 새로운 Calendar 객체 생성

getInstance(TimeZone zone, Locale aLocale) 
// 지정된 시간대와 로케일로 새로운 Calendar 객체 생성

Calendar.YEAR 
// 해당 연도

Calendar.MONTH 
// 해당 월

Calendar.DAY_OF_MONTH 
// 이 달의 몇일

Calendar.DAY_OF_Week 
// 요일

Calendar.HOUR 
// 시간

 

클래스 상수는 5가지 외의도 여러 가지가 존재합니다.

 

 

형식화 클래스


  • DecimalFormat

 숫자 데이터를 정수, 부동소수점, 금액 등의 다양한 형식으로 표현이 가능합니다.

double number = 1234567.89;

// 1.원하는 출력형식의 패턴을 작성하여 DecimalFormat 인스턴스를 생성
DecimalFormat df = new DecimalFormat("#.#E0"); 

// 2.출력하고자 하는 문자열로 format 메소드를 호출
String result = df.format(number);

 

  • SimpleDateFormat

날짜 데이터를 원하는 형태로 출력합니다.

Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(today);
//오늘 날짜를 yyyy-MM-dd 형태로 반환


DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date d = df.parse("2018년 10월 3일");

System.out.println(df2.format(d)); // 2018/10/03

 

 

  • Calendar와 Date 사이에 변환
//1. Calendar를 Date로 변환
    Calendar cal = Calendar.getInstance();
    Date d = new Date(cal.getTimeInMillis());

//2. Date를 Calendar로 변환
    Date d = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(d);

 

 

 

 

Time 패키지


java.time 패키지는

  • java.time.LocalDate,
  • java.time.LocalTime,
  • java.time.LocalDateTime,
  • java.time. DateTimeFormatter

에 대해 설명하겠습니다.

  • LocalDate
import java.time.LocalDate;


// LocalDate 클래스는 연도, 월, 일을 나타내는 클래스입니다. 시간은 포함하지 않습니다.

LocalDate date = LocalDate.now(); // 현재 날짜
LocalDate specificDate = LocalDate.of(2024, 1, 17); // 지정된 날짜
// 결과 2024-1-17

// 날짜 차이 계산

LocalDate startDate = LocalDate.now(); 
// 결과 2024-04-10

LocalDate endDate = LocalDate.of(2024,4,11);
// 결과 2024-04-11

Period period = Period.between(startDate, endDate);

period.getYears();      
// 0년 차이

period.getMonths();     
// 0개월 차이 

period.getDays();       
// 1일 차이 31일차이는 1개월 1일로 반환
  • LocalTime
import java.time.LocalTime;


// LocalTime 클래스는 시간을 나타내는 클래스입니다. 연도, 월, 일은 포함하지 않습니다.

LocalTime time = LocalTime.now(); 
// 현재 시간

LocalTime specificTime = LocalTime.of(14, 30);
// 지정된 시간 (14시 30분)
// 결과 14:30:00.0000000


// 시간비교
LocalTime startTime = LocalTime.now();  
// 결과 12:00:00

LocalTime endTime = LocalTime.of(12, 10, 00);
// 결과 12:10:00

// startTime이 endTime 보다 이전 시간 인지 비교
startTime.isBefore(endTime);    
// 결과 true

// startTime이 endTime 보다 이후 시간 인지 비교
startTime.isAfter(endTime); 
// 결과 false

// 시간 차이 계산

LocalTime startTime = LocalTime.now();  
// 결과  16:00:00
LocalTime endTime = LocalTime.of(16,00,00);
// 결과 	16:00:00

Duration duration = Duration.between(startTime, endTime);
duration.getSeconds();      
duration.getNano();
  • LocalDateTime
import java.time.LocalDateTime;


// LocalDateTime 클래스는 날짜와 시간을 모두 포함하는 클래스입니다.

LocalDateTime dateTime = LocalDateTime.now(); 
// 현재 날짜와 시간
LocalDateTime specificDateTime = LocalDateTime.of(2024, 1, 17, 14, 30); 
// 지정된 날짜와 시간
// 결과 2024-01-17T14:30:00.0000000




// 날짜 더하기 (빼기는 minus 입니다.)

plusYears() 	//년
plusMonths() 	// 월
plusWeeks() 	// 주
plusDays() 	// 일
plusHours() 	// 시
plusMinutes() 	// 분
plusSeconds() 	// 초
plusNanos() 	//밀리초

// ex=====================================

LocalDateTime plusDate = LocalDateTime.now();
// 2024-04-10T16:00:00.00

plusDate.plusDays(2);
// // 2024-04-12T16:00:00.00

 

  • DateTimeFormatter
import java.time.format.DateTimeFormatter;


// DateTimeFormatter 클래스는 날짜와 시간을 원하는 형식으로 변환하는 데 사용됩니다.

LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter); 
// 날짜와 시간을 지정된 형식으로 변환


// ex
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy년 M월 d일 a h시 m분");
String nowString = dateTime.format(dateTimeFormatter);   
// 2024년 04월 10일 오후 4시 0분


// ex2 
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
String nowString = dateTime.format(dateTimeFormatter);   
// 2024-04-10 16:00:00

 

 

 

이상 Java에서 날짜를 이용한 패키지와 클래스들 소개를 마칩니다!

 

참조