YTCW

java.util package, calendar 본문

java

java.util package, calendar

YTCW 2024. 9. 9. 17:20

java.util 패키지

자바의 표준 라이브러리 중 하나

데이터의 구조, 시간과 날짜 처리, 무작위 숫자 생성 등의 기능을 포함

 

시간과 날짜 처리하는 클래스

Date 클래스

날짜와 시간을 표현

현재의 밀리초 단위까지를 반환

toString() : 현재 날짜와 시간을 문자열로 반환

getTime() : 현재의 밀리초 단위를 반환

 

Calendar 클래스

날짜와 시간을 처리하기 위한 추상 클래스

Date 클래스 보다 더 빠른 날짜 시간 계산을 젝ㅇ

getInstance() : 현재 날짜와 시간으로 설정된 Calendar 객체를 반환

get(int field) : 지정된 필드의 값을 반환

객체의 필드 값을 반환

set(int year, int month, int date) : 연, 월, 일을 설정

 

import java.util.Calendar;

public class CalendarExample {
    public static void main(String[] args) {
        // 현재 날짜와 시간 정보를 가져오는 Calendar 객체 생성
        Calendar calendar = Calendar.getInstance();

        // 1. ERA: 연대(BC/AD)
        int era = calendar.get(Calendar.ERA);
        String eraString = (era == Calendar.AD) ? "AD" : "BC";

        // 2. YEAR: 연도
        int year = calendar.get(Calendar.YEAR);

        // 3. MONTH: 월 (0 = 1월, 11 = 12월)
        int month = calendar.get(Calendar.MONTH) + 1; // 1월 = 0이므로 +1

        // 4. WEEK_OF_YEAR: 연중 몇 번째 주
        int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);

        // 5. WEEK_OF_MONTH: 월 중 몇 번째 주
        int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);

        // 6. DATE / DAY_OF_MONTH: 월 중 몇 번째 날
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);

        // 7. DAY_OF_YEAR: 연중 몇 번째 날
        int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);

        // 8. DAY_OF_WEEK: 요일 (1 = 일요일, 7 = 토요일)
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        String[] days = { "N/A", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
        String dayOfWeekStr = days[dayOfWeek];

        // 9. DAY_OF_WEEK_IN_MONTH: 월 중 몇 번째 요일
        int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);

        // 10. AM_PM: 오전/오후
        int am_pm = calendar.get(Calendar.AM_PM);
        String amPmStr = (am_pm == Calendar.AM) ? "AM" : "PM";

        // 11. HOUR: 12시간 단위 시간 (0-11)
        int hour = calendar.get(Calendar.HOUR);

        // 12. HOUR_OF_DAY: 24시간 단위 시간 (0-23)
        int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);

        // 13. MINUTE: 분 (0-59)
        int minute = calendar.get(Calendar.MINUTE);

        // 14. SECOND: 초 (0-59)
        int second = calendar.get(Calendar.SECOND);

        // 15. MILLISECOND: 밀리초 (0-999)
        int millisecond = calendar.get(Calendar.MILLISECOND);

        // 16. ZONE_OFFSET: 시간대 차이 (밀리초 단위, GMT와의 차이)
        int zoneOffset = calendar.get(Calendar.ZONE_OFFSET) / (60 * 60 * 1000); // 시간 단위로 변환

        // 17. DST_OFFSET: 서머타임 차이 (밀리초 단위)
        int dstOffset = calendar.get(Calendar.DST_OFFSET) / (60 * 60 * 1000); // 시간 단위로 변환

        // 18. EXTENDED_YEAR: 확장 연도
        int extendedYear = calendar.get(Calendar.EXTENDED_YEAR);

        // 19. JULIAN_DAY: 율리우스 일수
        int julianDay = calendar.get(Calendar.JULIAN_DAY);

        // 20. IS_LEAP_MONTH: 윤달 여부 (기본 달력에서는 적용되지 않음)
        boolean isLeapMonth = (calendar.get(Calendar.IS_LEAP_MONTH) == 1);

        // 출력
        System.out.println("Calendar 정보:");
        System.out.println("ERA (연대): " + eraString);
        System.out.println("Year (연도): " + year);
        System.out.println("Month (월): " + month);
        System.out.println("Week of Year (연중 몇 번째 주): " + weekOfYear);
        System.out.println("Week of Month (월 중 몇 번째 주): " + weekOfMonth);
        System.out.println("Day of Month (월 중 몇 번째 날): " + dayOfMonth);
        System.out.println("Day of Year (연중 몇 번째 날): " + dayOfYear);
        System.out.println("Day of Week (요일): " + dayOfWeekStr);
        System.out.println("Day of Week in Month (월 중 몇 번째 요일): " + dayOfWeekInMonth);
        System.out.println("AM/PM (오전/오후): " + amPmStr);
        System.out.println("Hour (12시간제): " + hour);
        System.out.println("Hour of Day (24시간제): " + hourOfDay);
        System.out.println("Minute (분): " + minute);
        System.out.println("Second (초): " + second);
        System.out.println("Millisecond (밀리초): " + millisecond);
        System.out.println("Zone Offset (시간대 차이, GMT): " + zoneOffset + " hours");
        System.out.println("DST Offset (서머타임 차이): " + dstOffset + " hours");
        System.out.println("Extended Year (확장 연도): " + extendedYear);
        System.out.println("Julian Day (율리우스 일수): " + julianDay);
        System.out.println("Is Leap Month (윤달 여부): " + isLeapMonth);
    }
}
// 생일까지 남은 일수 계산 프로그램
// 사용자로부터 생년월일을 입력받고
// 다가오는 생일까지 남은 일수를 반환

// 1. 사용자로부터 생년월일 입력받기
// 스캐너 >> 연도, 월, 일을 각각 입력받기
Scanner sc = new Scanner(System.in);
System.out.println("연도 : YYYY, 월 : MM, 일 : DD");
int birthYear = sc.nextInt(); // 연도
int birthMonth = sc.nextInt(); // 월
int birthDay = sc.nextInt(); // 일

// 현재 날짜와 시간을  포함하는 Calendar 인스턴스 생성
Calendar today = Calendar.getInstance();

// 사용자의 생일 설정(월은 0부터 시작하기 때문에 -1을 해야함)
Calendar birthday = Calendar.getInstance();
birthday.set(Calendar.YEAR, birthYear);
birthday.set(Calendar.MONTH, birthMonth -1);
birthday.set(Calendar.DAY_OF_MONTH, birthDay);

// 올해의 생일이 이미 지났는지 확인
if(birthday.before(today)) {
    // 이미 지났다면 내년으로 설정
    birthday.set(Calendar.YEAR, today.get(Calendar.YEAR) + 1);
}
long difference = (birthday.getTimeInMillis() - today.getTimeInMillis()) / (1000 * 60 * 60 * 24);

// 날짜 차이 계산 (밀리초 단위로 계산 후 일 단위로 변경)
// 1초 = 1000밀리초, 1분 = 60초, 1시간 = 60분, 1일 = 24시간		
System.out.println("남은 생일은 : " + difference + "일");

'java' 카테고리의 다른 글

java ArrayList, LinkedList, List 차이점  (1) 2024.09.10
java collection  (0) 2024.09.10
java.lang  (0) 2024.09.09
java 예외처리, exception  (3) 2024.09.09
java 인터페이스, interface  (0) 2024.09.09