본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

Calendar와 Date, 이를 이용한 날짜/ 일수 출력하기

오래전부터 제공되던 Date클래스를 보완하기 위해 Calendar 클래스가 등장.

 

Calendar와 GregorianCalendar

GregorianCalendar는 Calendar를 상속받아 구현한 전세계 공통 그레고리력에 맞게 구현한것.

// Calendar를 사용하여 현재 날짜 및 시간 가져오기
Calendar calendar = Calendar.getInstance();
System.out.println("Calendar - 현재 날짜 및 시간: " + calendar.getTime());
//Calendar - 현재 날짜 및 시간: Mon Dec 27 12:34:56 UTC 2023
GregorianCalendar gregorianCalendar = new GregorianCalendar();
System.out.println("GregorianCalendar - 현재 날짜 및 시간: " + gregorianCalendar.getTime());
//GregorianCalendar - 현재 날짜 및 시간: Mon Dec 27 12:34:56 UTC 2023

 

 

GregorianCalendar를 통해 특정 날짜를 설정할 수도 있다.

// GregorianCalendar를 사용하여 특정 날짜로 설정 (년, 월, 일)
int year = 2023;
int month = Calendar.JANUARY; // 월은 0부터 시작
int dayOfMonth = 1;
Calendar specificDate = new GregorianCalendar(year, month, dayOfMonth);
System.out.println("GregorianCalendar - 특정 날짜: " + specificDate.getTime());
//GregorianCalendar - 특정 날짜: Sun Jan 01 00:00:00 UTC 2023

 

 

 

 

Date관련 작성할 수 있는 메서드를 확인해보자.

 

boolean isLeapYear(int year)

해당연도가 윤년인지 확인

public class LeapYearExample {
    public static void main(String[] args) {
        int year = 2023;
        boolean isLeapYear = isLeapYear(year);
        System.out.println(year + "년은 윤년인가? " + isLeapYear);
    }

    public static boolean isLeapYear(int year) {
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }
}
//2023년은 윤년인가? false

https://standout.tistory.com/1223

 

하루가 더 많다, 윤년

일반적인 해와는 달리 1년이 365일이 아닌 366일인 해 매 4년마다 발생, 이때 2월이 29일까지 늘어남. 태양년은 지구가 태양을 한번 공천하는데 걸리는시간으로 약 365.2422일. 그레고리력은 평년을 36

standout.tistory.com

 

 

 

int dayDiff(int y1, int m1, int d1, int y2, int m2, int d2)

두 날짜간의 일수 차이를 계산하다.

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class DayDifferenceExample {
    public static void main(String[] args) {
        int year1 = 2022, month1 = 12, day1 = 1;
        int year2 = 2023, month2 = 1, day2 = 1;

        int dayDiff = dayDiff(year1, month1, day1, year2, month2, day2);
        System.out.println("두 날짜 간의 일 수 차이: " + dayDiff);
    }

    public static int dayDiff(int y1, int m1, int d1, int y2, int m2, int d2) {
        LocalDate date1 = LocalDate.of(y1, m1, d1);
        LocalDate date2 = LocalDate.of(y2, m2, d2);
        return (int) ChronoUnit.DAYS.between(date1, date2);
    }
}
//두 날짜 간의 일 수 차이: 31

 

 

int getDayOfWeek(int year, int month, int day)

특정날짜의 요일을 도출하다

import java.time.DayOfWeek;
import java.time.LocalDate;

public class DayOfWeekExample {
    public static void main(String[] args) {
        int year = 2023, month = 1, day = 1;
        int dayOfWeek = getDayOfWeek(year, month, day);
        System.out.println(year + "년 " + month + "월 " + day + "일은 " + dayOfWeek + "요일");
    }

    public static int getDayOfWeek(int year, int month, int day) {
        LocalDate date = LocalDate.of(year, month, day);
        DayOfWeek dayOfWeek = date.getDayOfWeek();
        return dayOfWeek.getValue(); // 1: 월요일, 2: 화요일, ..., 7: 일요일
    }
}
//2023년 1월 1일은 7요일

 

 

String convertDayToDate(int day)

일수를 날짜로 변환한다.

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateConverter {

    public static void main(String[] args) {
        // 예시: 100일 후의 날짜 출력
        int days = 100;
        String convertedDate = convertDayToDate(days);
        System.out.println("Converted date after " + days + " days: " + convertedDate);
    }

    // 일수를 날짜로 변환하는 함수
    public static String convertDayToDate(int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, day);
        Date convertedDate = calendar.getTime();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        return dateFormat.format(convertedDate);
    }
}
//Converted date after 100 days: 2024-04-05

 

 

 

int convertDate ToDay(int year, int month, int day)

년, 월, 일을 입력받아 해당 날짜까지의 총 일수를 계산한다.

import java.util.Calendar;

public class DateConverter {

    public static void main(String[] args) {
        // 예시: 2022년 3월 15일까지의 총 일수 출력
        int year = 2022;
        int month = 3;
        int day = 15;
        int totalDays = convertDateToDay(year, month, day);
        System.out.println("Total days until " + year + "-" + month + "-" + day + ": " + totalDays + " days");
    }

    // 날짜를 일수로 변환하는 함수
    public static int convertDateToDay(int year, int month, int day) {
        Calendar targetDate = Calendar.getInstance();
        targetDate.set(year, month - 1, day); // month는 0부터 시작하므로 -1 해줌
        Calendar currentDate = Calendar.getInstance();

        // 현재 날짜부터 목표 날짜까지의 차이를 일수로 계산
        long diffMillis = targetDate.getTimeInMillis() - currentDate.getTimeInMillis();
        int totalDays = (int) (diffMillis / (24 * 60 * 60 * 1000));
        return totalDays;
    }
}
//Total days until 2022-3-15: 721 days