11.16 java.time 패키지

- 자바8부터 추가된 패키지

- 날짜와 시간을 나타내는 여러가지 API가 새롭게 추가됨

- 날짜와 시간을 조작하거나 비교하는 기능이 추가됨

// Date와 Calendar는 날짜와 시간을 조작하거나 비교하는 기능이 불충분


11.16.1 날짜와 시간 객체 생성


* LocalDate


* LocalTime


* LocalDateTime


* ZonedDateTime

- 저장 형태 : 2014-04-21 T07:50:24.017 +09:00(존오프셋) [Asia/Seoul](존아이디)

- 존오프셋(ZoneOffset)

// 협정세계시(UTC : Universal Time Coordinated)와 차이나는 시간(시차)를 말한다

- 존아이디(ZoneId)

// java.util.TimeZone의 getAvailbleDs() 메소드가 리턴하는 유효한 값 중 하나


존아이디

1
2
3
4
5
String[] availableIDs = TimeZone.getAvailableIDs()
for(String zoneId : availableIDs)
{
    System.out.println(zoneId);
}
cs


* Instant

- 날짜와 시간의 정보를 얻거나, 조작하는데 사용되지 않고

- 특정 시점의 타임스탬프(Time-Stamp)로 사용

- 주로 특정 두 시점간의 시간적 우선 순위를 따질 때 주로 사용

- java.util.Date와 가장 유사한 클래스

// Date : 로컬 컴퓨터의 현재 날짜와 시간 정보를 기준

// Instant : 협정 세계시(UTC)를 기준


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package sec16.exam01_java_time;
 
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
 
public class DateTimeCreateExample {
    public static void main(String[] args) throws InterruptedException { // 43라인의 예외처리
        //날짜 얻기
        LocalDate currDate = LocalDate.now(); // 2017-11-28
        System.out.println("현재 날짜: " + currDate);
 
        LocalDate targetDate = LocalDate.of(2024510); // 2024-05-10
        System.out.println("목표 날짜: " + targetDate + "\n");
 
        //시간 얻기
        LocalTime currTime = LocalTime.now(); // 19:59:16.020
        System.out.println("현재 시간: " + currTime);
        
        LocalTime targetTime = LocalTime.of(63000); // 06:30
        System.out.println("목표 시간: " + targetTime + "\n");
        
        //날짜와 시간 얻기
        LocalDateTime currDateTime = LocalDateTime.now(); // 2017-11-28T19:59:16.020
        System.out.println("현재 날짜와 시간: " + currDateTime);
        
        LocalDateTime targetDateTime = LocalDateTime.of(202451063000); // 2024-05-10T06:30
        System.out.println("목표 날짜와 시간: " + targetDateTime + "\n");
        
        //협정 세계시와 시간존(TimeZone)
        ZonedDateTime utcDateTime =   ZonedDateTime.now(ZoneId.of("UTC")); // 2017-11-28T10:59:16.021Z[UTC]
        System.out.println("협정 세계시: " + utcDateTime);
        ZonedDateTime newyorkDateTime = 
       ZonedDateTime.now(ZoneId.of("America/New_York")); // 2017-11-28T05:59:16.023-05:00[America/New_York]
        System.out.println("뉴욕 시간존: " + newyorkDateTime + "\n");
        
        //특정 시점의 타임스탬프 얻기
        Instant instant1 = Instant.now();
        Thread.sleep(10);
        Instant instant2 = Instant.now();        
        if(instant1.isBefore(instant2)) { 
            System.out.println("instant1이 빠릅니다.");
        } else if(instant1.isAfter(instant2)) {
            System.out.println("instant1이 늦습니다.");
        } else {
            System.out.println("동일한 시간입니다.");
        }
        System.out.println("차이(nanos): " + instant1.until(instant2, ChronoUnit.NANOS));
    }
}
cs


11.16.2 날짜와 시간에 대한 정보 얻기


- LocalDateTime/ZonedDateTime에는 위 표에 나와있는 대부분의 메소드를 가진다

// 단 isLeapYear()는 LocalDate에만 있기때문에 toLocalDate() 메소드로 LocalDate로 변환 후에 사용할 수 있다

// ZonedDateTime에서 제공하는 추가적인 메소드


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package sec16.exam01_java_time;
 
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
 
public class DateTimeInfoExample {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);
 
        String strDateTime = now.getYear() + "년 ";
        strDateTime += now.getMonthValue() + "월 ";
        strDateTime += now.getDayOfMonth() + "일 ";
        strDateTime += now.getDayOfWeek() + " ";
        strDateTime += now.getHour() + "시 ";
        strDateTime += now.getMinute() + "분 ";
        strDateTime += now.getSecond() + "초 ";
        strDateTime += now.getNano() + "나노초";
        System.out.println(strDateTime + "\n");
        
        LocalDate nowDate = now.toLocalDate(); 
        if(nowDate.isLeapYear()) {
            System.out.println("올해는 윤년: 2월은 29일까지 있습니다.\n");
        } else {
            System.out.println("올해는 평년: 2월은 28일까지 있습니다.\n");
        }
        
        //협정 세계시와 존오프셋
        ZonedDateTime utcDateTime =   ZonedDateTime.now(ZoneId.of("UTC"));
        System.out.println("협정 세계시: " + utcDateTime);
        ZonedDateTime seoulDateTime =  ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
        System.out.println("서울 타임존: " + seoulDateTime);
        ZoneId seoulZoneId = seoulDateTime.getZone();
        System.out.println("서울 존아이디: " + seoulZoneId);
        ZoneOffset seoulZoneOffset = seoulDateTime.getOffset();
        System.out.println("서울 존오프셋: " + seoulZoneOffset + "\n");
    }
}
cs

 


11.16.3 날짜와 시간을 조작하기

* 빼기와 더하기

*변경하기



11.16.4 날짜와 시간을 비교하기






Posted by 너래쟁이
: