Java에서 날짜와 시간을 다루기 위한 패키지
패키지 | 설명 |
---|---|
java.time | 날짜와 시간을 나타내는 LocalDate, LocalTime등을 포함한 패키지 |
java.time.format | 날짜와 시간을 파싱하고 포맷팅하는 API포함 |
java.time.chrono | 여러가지 달력 시스템을 사용할 수 있는 API 포함 |
java.time.temporal | 날짜와 시간을 연산하기 위한 API 포함 |
java.time.zone | 타임존을 지원하는 API포함 |
LocalDate 클래스
날짜 정보를 저장
1) 현재 날짜를 지정: now() 메서드
2) 특정 날짜를 지정: of() 메서드
LocalTime 클래스
시간정보를 저장하는 클래스
1) 현재 시간 지정: now() 메서드
2) 특정 시간 지정: of() 메서드
LocalDateTime 클래스
날짜 정보와 시간 정보를 모두 저장
1) 현재 날짜와 시간 지정: now() 메서드
2) 특정 날짜와 시간 지정: of() 메서드
ZonedDateTime 클래스
1) ISO-8601 달력 시스템에서 정의하는 Time Zone에 따라 날짜와 시간 저장
2) 형식: 2016-01-08T12:56:09.017+09:00(Asia/Seoul)
3) ZoneDateTime 클래스는 now() 메서드 뒤에 ZoneId를 매개값으로 넘겨야함
ZoneDateTime zdt = ZoneDateTime.now(ZoneId.of("UTC"));
Calendar 클래스는 1월이 0으로 시작하나, LocalDate는 1월은 1로 시작함
클래스 | 리턴타입 | 메서드 | 설명 |
---|---|---|---|
LocalDate | int | getYear() | 년도 |
LocalDate | Month | getMonth() | Month의 열거값 |
LocalDate | int | getMonthValue() | 월 |
LocalDate | int | getDayOfYear() | 1년의 몇 번째 일 |
LocalDate | int | getDayOfMonth() | 월의 몇 번째 일 |
LocalDate | DayOfWeek | getDayOfWeek() | 요일 |
LocalDate | boolean | isLeapYear() | 윤년 여부 |
LocalTime | int | getHour() | 시간 |
LocalTime | int | getMinute() | 분 |
LocalTime | int | getSecond() | 초 |
LocalTime | int | getNano() | 나노초 |
각 클래스는 필드의 값을 변경하기 위한 메서드가 존재한다.
클래스 | 리턴타입 |
---|---|
minusYears(long) | 년도 빼기 |
minusMonths(long) | 월 빼기 |
minusDays(long) | 일 빼기 |
minusWeeks(long) | 주 빼기 |
plusYears(long) | 년도 더하기 |
plusMonths(long) | 월 더하기 |
plusDays(long) | 일 더하기 |
plusWeeks(long) | 주 더하기 |
minusHours(long) | 시간 빼기 |
minusMinutes(long) | 분 빼기 |
minusSeconds(long) | 초 빼기 |
minusNanos(long) | 나노초 빼기 |
plusHours(long) | 시간 더하기 |
plusMinutes(long) | 분 더하기 |
LocalDate ld=LocalDate.now();
System.out.println(ld);
LocalDate ld2=ld.minusYears(2).plusMonths(3).minusDays(4);
System.out.println(ld2);
각 클래스는 필드의 값들을 특정 값으로 변경하기 위한 메서드가 존재
클래스 | 리턴타입 |
---|---|
withYear(int) | 년 변경 |
withMonth(int) | 월 변경 |
withDayOfMonth(int) | 월의 일 변경 |
withDayOfYear(int) | 년의 일 변경 |
withHour(int) | 시간 변경 |
withMinute(int) | 분 변경 |
withSecond(int) | 초 변경 |
withNano(int) | 나노초 변경 |
public static void main(String[] args) {
LocalDate ld = LocalDate.now();
System.out.println(ld);
LocalDate new_ld=ld.withYear(1999).withMonth(8).withDayOfYear(23);
System.out.println(new_ld);
}
}
개발자가 원하는 특정한 시간에 코드를 실행하거나 특정 시간 간격으로 반복되는 작업 처리
<사용방법>
1) TimerTask를 상속받는 새로운 클래스 선언
class Work1 extends TimerTask{...}
2) TimerTask 클래스의 run 추상 메서드에서 하고 싶은 작업 오버라이딩
public void run(){...}
3) Timer객체 생성 후 원하는 시간을 매개변수 값으로 전달
Timer t = new Timer(true) //프로그램 종료 시, 객체 자동 소멸하라는 것
TimerTask.w1 = new Work1();
t.schedule(w1, 5000); //1000 == 1초
public static void main(String[] args) throws InterruptedException {
Timer t = new Timer(true);
TimerTask w1 = new Work1();
TimerTask w2 = new Work2();
t.schedule(w1, 3000);
t.schedule(w2, 1000);
Thread.sleep(4000);
System.out.println("모든 작업 종료!");
}
}
class Work1 extends TimerTask{
@Override
public void run() {
System.out.println("work1 실행");
}
}
class Work2 extends TimerTask{
@Override
public void run() {
System.out.println("work2 실행");
}
}