Java 시간 측정 - Java sigan cheugjeong

티스토리 뷰

실행시간 측정하는 3가지 방법 

StopWatch - spring

StopWatch stopWatch = new StopWatch();
stopWatch.start();
//...
//...
//...
stopWatch.stop();
System.out.println("소요시간:"+stopWatch.getTotalTimeMillis()+"ms");
System.out.println(stopWatch.prettyPrint());

* apache comm-lang3에서도 제공되지만 둘다 thread safe 하지 않음 

Instant

Instant stime = Instant.now();
//...
//...
//...
Instant etime = Instant.now();
System.out.println("소요시간:"+Duration.between(stime, etime).toMillis()+"ms");

System.currentTimeMillis()

long stime = System.currentTimeMillis();
//...
//...
//...
System.out.println("소요시간:"+(System.currentTimeMillis()-stime)+"ms");

목차

Java 시간 측정 - Java sigan cheugjeong

자바 코드 실행 시간 측정하기

밀리 초 측정하기

Java에서 기본적으로 제공하는 메서드중 System.currentTimeMillis 메서드를 이용하면 현재 시간을 밀리세컨드 단위로 출력할 수 있다.

다음과 같이, long 타입 변수 startTime, endTime에 각각 currentTimeMillis() 값을 입력받도록 하고, 두 시간의 차이를 밀리 세컨드 단위로 구하면 곧 코드 실행 시간이 된다.

public static void main(String[] args) {
	long startTime = System.currentTimeMillis(); // 코드 시작 시간

	// 코드 ...

	long endTime = System.currentTimeMillis(); // 코드 끝난 시간

	long durationTimeSec = endTime - startTime;
    
	System.out.println(durationTimeSec + "m/s"); // 밀리세컨드 출력
	System.out.println((durationTimeSec / 1000) + "sec"); // 초 단위 변환 출력
}

나노 초 측정하기

만일 좀더 자세한 시간을 측정하고 싶다면 nanoTime() 메서드를 이용해 밀리초 가 아닌 나노초를 구해서 해도 된다.

public static void main(String[] args) {
	long startTime = System.nanoTime(); // 코드 시작 시간

	// 코드 ...

	long endTime = System.nanoTime(); // 코드 끝난 시간

	long durationTimeSec = endTime - startTime;
    
	System.out.println(durationTimeSec + "n/s"); // 나노세컨드 출력
}

잘못된 내용이 있으면 댓글로 피드백 부탁드립니다 :)

이 글이 좋으셨다면 구독 & 좋아요

여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.

Java 시간 측정 - Java sigan cheugjeong

  • JAVA에는 시간 관련 메소드가 매우 많음
  • 더 많은 방법들이 있겠지만 몇개의 방법만 정리해봄

프로그램 실행시간 측정 방법

  • 프로그램의 실행시간을 측정하는 방법은 프로그램의 실행 시작과 실행 끝부분에 현재시간을 측정해서 두 시간의 차이를 구해주면 됨

현재시간 측정 방법

  1. System.currentTimeMillis(), System.nanoTime()
  2. Instant, Duration
  3. LocalDate.now()
  • 등 매우 다양한 방법이 존재

특정시간 대기

  • 프로그램 실행 중 몇 초 동안 대기하기를 원할 수 있음
  • 이 때 가능한 방법으로는
  1. Thread.sleep()
  2. TimeUnit.SECONDS.sleep()
  • 등의 방법이 존재

  • Thread.sleep() 사용 시, 파라미터로 들어가는 숫자는 ms가 기준. Thread.sleep(1000)은 1초 대기를 뜻함

  • TimeUnit.SECONDS.sleep() 사용 시, java.util.concurrent.TimeUnit을 import 해줘야 하고, SECONDS 대신 DAYS, HOURS, MINUTES, MILLISECONDS 등 다양하게 사용 가능

  • 그리고 위 두 방법 사용 시 try - catch로 묶어줘야 에러가 발생하지 않음

System.currentTimeMillis(), System.nanoTime()으로 프로그램 실행시간 측정 예제 ( TimeUnit.SECONDS.sleep() 으로 대기 )

package TimeTest;

import java.util.concurrent.TimeUnit;

public class TimeMain {

    public static void main(String[] args) {
        long StartTime1 = System.currentTimeMillis();
        long StartTime2 = System.nanoTime();

        System.out.println("프로그램 시작!");

        try {
            TimeUnit.SECONDS.sleep(10);
        }catch(Exception e) {
            e.printStackTrace();
        }

        long EndTime1 = System.currentTimeMillis();
        long EndTime2 = System.nanoTime();

        System.out.println("프로그램 종료!");
        System.out.println("===================");
        System.out.println("프로그램 실행시간");
        System.out.println("currentTimeMillis() : " + (EndTime1 - StartTime1)/1000.0 + "초");
        System.out.println("nanoTime() : " + (EndTime2 - StartTime2)/1000000000.0 + "초");
    }
}

결과

프로그램 시작!
프로그램 종료!
===================
프로그램 실행시간
currentTimeMillis() : 10.007초
nanoTime() : 10.006815125초

Instant, Duration을 사용한 프로그램 실행시간 측정 예제

package TimeTest;

import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.TimeUnit;

public class TimeMain {

    public static void main(String[] args) {
        Instant StartTime = Instant.now();

        System.out.println("프로그램 시작!");    
        try {
            TimeUnit.SECONDS.sleep(10);
        }catch(Exception e) {
            e.printStackTrace();
        }
        Instant EndTime = Instant.now();

        System.out.println("프로그램 종료!");
        System.out.println("===================");
        System.out.println("프로그램 실행시간");
        System.out.println(Duration.between(StartTime, EndTime).toSeconds() + "초");
    }
}

결과

프로그램 시작!
프로그램 종료!
===================
프로그램 실행시간
10초

LocalDateTime()으로 프로그램 실행시간 측정 예제 ( Thread.sleep() 으로 대기)

package TimeTest;

import java.time.Duration;
import java.time.LocalDateTime;

public class TimeMain {

    public static void main(String[] args) {

        LocalDateTime StartTime = LocalDateTime.now();

        System.out.println("프로그램 시작!");    

        try {
            Thread.sleep(10000);
        }catch(Exception e) {
            e.printStackTrace();
        }

        LocalDateTime EndTime = LocalDateTime.now();

        System.out.println("프로그램 종료!");
        System.out.println("===================");
        System.out.println("프로그램 실행시간");
        System.out.println(Duration.between(StartTime, EndTime).toSeconds() + "초");
    }
}

결과

프로그램 시작!
프로그램 종료!
===================
프로그램 실행시간
10초

LocalDateTime()으로 현재 날짜/시간 출력하기 ( + 날짜/시간 포맷 설정)

  • LocalDateTime().now()로 구한 현재날짜/시간을 그대로 출력하면 "2022-04-15T17:33:21.066338700" 이런 식으로 출력되는데, 이를 년, 월, 일 등으로 따로 추출하는 방법과 DateTimeFormatter을 이용해 저장하는 방법
package TimeTest;

import java.time.LocalDateTime;
import java.time.DayOfWeek;
import java.time.Month;
import java.time.format.DateTimeFormatter;

public class TimeMain {

    public static void main(String[] args) {

        LocalDateTime NowTime = LocalDateTime.now();
        System.out.println(NowTime);

        int year = NowTime.getYear();
        int month = NowTime.getMonthValue();
        Month month2 = NowTime.getMonth();  // java.time.Month import 필요 => JANUARY, FEBRUARY, MARCH 등으로 표시 

        int day = NowTime.getDayOfMonth();
        DayOfWeek day2 = NowTime.getDayOfWeek();    // java.time.DayOfWeek import 필요 =>  MONDAY, TUESDAY, WEDNESDAY 등으로 표시
        int hour = NowTime.getHour();
        int minute = NowTime.getMinute();
        int second = NowTime.getSecond();

        System.out.println("년 : " + year);
        System.out.println("월 : " + month + " (" + month2 + ")");
        System.out.println("일 : " + day + " (" + day2 + ")");
        System.out.println("시 : " + hour);
        System.out.println("분 : " + minute);
        System.out.println("초 : " + second);

        String formatDate = NowTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        System.out.println(formatDate);
        String formatDate2 = NowTime.format(DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 HH시 mm분 ss초"));
        System.out.println(formatDate2);
    }
}

결과

2022-10-03T20:18:53.967358
년 : 2022
월 : 10 (OCTOBER)
일 : 3 (MONDAY)
시 : 20
분 : 18
초 : 53
2022-10-03
2022년 10월 03일 20시 18분 53초

Timer, TimerTask를 이용한 타이머 기능 예제 - 1. 몇 초 뒤에 알림 기능

package TimeTest;

import java.util.Timer;
import java.util.TimerTask;

public class TimeMain {

    public static void main(String[] args) {
        int time = 5;

        Timer m = new Timer();
        TimerTask task = new TimerTask() {

            @Override
            public void run() {
                System.out.println(time + "초 지남!");
            }
        };

        System.out.println(time + "초 뒤에 알려줌!");
        m.schedule(task, time * 1000);        // 기준이 ms이므로 *1000 해줘야 함
    }
}

결과

5초 뒤에 알려줌!
5초 지남!

Timer, TimerTask를 이용한 타이머 기능 예제 - 2. 몇 초 마다 알림 기능

package TimeTest;

import java.util.Timer;
import java.util.TimerTask;

public class TimeMain {

    public static void main(String[] args) {
        int time = 5;

        Timer m = new Timer();
        TimerTask task = new TimerTask() {
            int count = 1;

            @Override
            public void run() {
                if(count < 10) {
                    System.out.println( (time * count) + "초 지남!");
                    count ++;
                } else {
                    System.out.println( (time * count) + "초 지남!");
                    System.out.println("끝!");
                    m.cancel();
                }
            }
        };

        System.out.println(time + "초 마다 10번 알려줌!");
        m.schedule(task, time * 1000, time * 1000); 
        // 두번째 파라미터 => 몇초 뒤 시작을 의미
        // 세번째 파라미터 => 몇초 마다 run메서드 실행을 의미
    }
}

결과

5초 마다 10번 알려줌!
5초 지남!
10초 지남!
15초 지남!
20초 지남!
25초 지남!
30초 지남!
35초 지남!
40초 지남!
45초 지남!
50초 지남!
끝!