반응형
- JAVA에는 시간 관련 메소드가 매우 많음
- 더 많은 방법들이 있겠지만 몇개의 방법만 정리해봄
프로그램 실행시간 측정 방법
- 프로그램의 실행시간을 측정하는 방법은 프로그램의 실행 시작과 실행 끝부분에 현재시간을 측정해서 두 시간의 차이를 구해주면 됨
현재시간 측정 방법
- System.currentTimeMillis(), System.nanoTime()
- Instant, Duration
- LocalDate.now()
- 등 매우 다양한 방법이 존재
특정시간 대기
- 프로그램 실행 중 몇 초 동안 대기하기를 원할 수 있음
- 이 때 가능한 방법으로는
- Thread.sleep()
- 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초 지남!
끝!
반응형
'JAVA > 기본 문법' 카테고리의 다른 글
[JAVA] 파일 입출력(BufferedReader, PrintWriter) , 파일 경로 (0) | 2022.04.18 |
---|---|
[JAVA] 화면 입력 받기 (Scanner) (0) | 2022.04.18 |
[JAVA] 쓰레드 (Thread), SingleThread, MultiThread 예제 (0) | 2022.04.14 |
[JAVA] 예외처리 (Exception Handling) (0) | 2022.04.14 |
[JAVA] Stack & Queue (0) | 2022.04.13 |