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에서 기본적으로 제공하는 메서드중 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에는 시간 관련 메소드가 매우 많음
  • 더 많은 방법들이 있겠지만 몇개의 방법만 정리해봄

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

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

현재시간 측정 방법

  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초 지남! 끝!

Toplist

최신 우편물

태그