자바

date, calendar

chantleman 2024. 7. 25. 15:31

 

 

getTime(): 1970년 1월 1일 0시로부터 지난 시간을 나타냄

 

    Date date = new Date();
    long time = date.getTime();

 

 


1 ~ 100만까지 더하는데 걸리는 시간 출력

    long p=0;
    Date d1 = new Date(); //d1을 불러왔을 그 당시의 시간

    for(long i =1;i<=1000000;i++)
    {		
        p+=i;			
    }
    Date d2 = new Date(); //d2를 불러올 당시의 시간

    long time = d2.getTime() - d1.getTime();
    System.out.println(time+"ms");

 

프로그램이 느리다 싶으면 이런식으로 date 객체들을 생성해서 시간을 체크해줘야합니다.

 

벤치마크(알고리즘이 얼마나 효율적인지 체크)

: 한 프로젝트에서 여러 기능을 개발하게 되는데 만약 속도가 느리면
어느부분에서 병목현상이 발생했는지 확인해야됩니다.

그럴때 date 를 이용해서 속도 체크 합니다

 

 

디비튜닝

: 보통 DB에서 쿼리 갖고올때 속도 차이가 많이 발생하기때문에

만약 느리면 DB 쿼리를 확인해보고 쿼리를 수정해야합니다

 

 

 


 

날짜 형식 맞추기

 

HH : 0~23

hh : 1~12

a : am/pm

    //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a hh:mm:ss");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String str = sdf.format(date);
    System.out.println(str);

 


 

date → String   date  변환

    public void method5() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String str= ScanUtil.nextLine("날짜: ");

        //TO_DATE
        try {
            Date date = sdf.parse(str); 
            System.out.println(date);
        } catch (ParseException e) {
            System.out.println("년-월-일 형식으로 하세요");
        }
    }

 

parse는 입력받을 때 형식을 다르게 할수도 있기 때문에 예외처리를 해줘야합니다.

 

 


 

 

오늘로부터 며칠 뒤는 어떤 날짜인지 출력

 

 

Date 사용해서 하기

    public void method6() {
        int days = ScanUtil.nextInt("며칠 뒤: ");

        Date date = new Date();
        Date date2 = new Date(date.getTime()+1000L*60*60*24*days); //int범위 벗어나서 L붙임

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");
        String str = sdf.format(date2);
        System.out.println(str);
    }

 

 

 

Calendar사용해서 하기

    public void method2() {
        int day = ScanUtil.nextInt("더할 날짜 입력: ");
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, day);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        Date date = cal.getTime();
        System.out.println(sdf.format(date));		
    }

 

 


 

 

오늘로부터 특정 날짜가 며칠 뒤인지 출력

 

    public void method7() {
        String str = ScanUtil.nextLine("날짜:");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd");		
        Date date;
        try {
            date = sdf.parse(str); //특정날짜 date로 형변환
            Date cur = new Date(); //현재 날짜

            long time = date.getTime() - cur.getTime();
            long days = time/1000/60/60/24;
            System.out.println(days);	
        } catch (ParseException e) {
            System.out.println("날짜 형식 yyyy-mm-dd로 해주세요");
        }	
    }

 


 

데이터 변경 set

    Calendar cal = Calendar.getInstance();

    cal.set(Calendar.YEAR, 2028);
    cal.set(Calendar.DATE, 1);
    cal.set(Calendar.HOUR, 1);

현재 날짜 년도를 2028년으로, 일을 1일로, 시간을 한시로 설정

 

 

시간 더하기

    Calendar cal = Calendar.getInstance();

    cal.add(Calendar.DATE, 100);   //100일 뒤 날짜
    cal.add(Calendar.HOUR,30);     //30시간 뒤
    cal.add(Calendar.DATE, -1);    //전 날짜

현재 날짜에서 100일 뒤, 30시간 뒤의 전 날짜 출력

 

 

 

값가져오기

    int day = cal.get(Calendar.DATE);
    System.out.println(day);

 

 

Calendar → date

    Date date = cal.getTime();
    System.out.println(date);

 

 

 


 

    import java.util.Calendar;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Scanner;
    import kr.or.ddit.util.ScanUtil;

    public class CalendarExample {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);

            System.out.print("연도를 입력하세요 (예: 2024): ");
            int year = scanner.nextInt();

            System.out.print("월을 입력하세요 (1-12): ");
            int month = scanner.nextInt();

            Calendar cal = Calendar.getInstance();
            cal.set(year, month - 1, 1); // 월은 0부터 시작하므로 month - 1

            while(true) {
                if (month < 1 || month > 12) {
                    System.out.println("잘못된 월입니다. 1에서 12 사이의 값을 입력하세요.");
                    return;
                }

                // 첫 번째 날의 요일과 최대 일 수를 계산
                int firstDayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
                int maxDayOfMonth = cal.getActualMaximum(Calendar.DAY_OF_MONTH);

                // 현재 달을 출력하기 위한 SimpleDateFormat 객체를 생성
                Date date = cal.getTime();
                SimpleDateFormat sdf = new SimpleDateFormat(" yyyy년 MM월 ");

                System.out.println("===================" + sdf.format(date) + "====================");
                System.out.println("일\t월\t화\t수\t목\t금\t토");
                System.out.println("===================================================");

                // 첫 번째 날 이전의 공백을 출력
                for (int i = 1; i < firstDayOfWeek; i++) {
                    System.out.print("\t");
                }

                // 달력 날짜를 출력
                for (int day = 1; day <= maxDayOfMonth; day++) {
                    System.out.print(day + "\t");
                    if ((day + firstDayOfWeek - 1) % 7 == 0) {
                        System.out.println();
                    }
                }

                System.out.println();

                String str = ScanUtil.nextLine("< 이전달  다음달  >");
                if(str.equals("<")){
                    cal.add(Calendar.MONTH,-1);
                }
                if(str.contentEquals(">")) {
                    cal.add(Calendar.MONTH,1);
                }

            }
        }
    }

calendar클래스에서 월을 0~11까지 인덱스로 처리하기 때문에 1을 더해줘야함

 

> 입력하면 다음달로

< 입력하면 이전달로 넘어가기

'자바' 카테고리의 다른 글

collection  (0) 2024.07.26
hash  (0) 2024.07.26
try-catch, throw Exception  (2) 2024.07.24
간단한 게시판 예제  (1) 2024.07.24
인터페이스  (2) 2024.07.24