반응형
이 포스팅에서 작성하는 내용은 더 자바, Java 8 에서 발췌하였습니다.
https://www.inflearn.com/course/the-java-java8
Date
- 기존 Java 7이전에서 제공되던 Date 타입에는 많은 단점이 존재
- 클래스에 대한 작명이 아쉬움 (Date인데, 시간도 들어가있음)
- mutable 하기 때문에 Thread Safe 하지 않음.
mutable : 객체의 상태를 바꿀 수 있음 - 버그 발생 가능성이 많음
Month의 경우, 0부터 시작해서 0이 1월을 의미
- 위의 Date 의 단점으로, JodaTime이라는 오픈 라이브러리를 사용해왔음
import java.util.Date;
public class Example8 {
public static void main(String[] args) throws InterruptedException {
Date now = new Date();
long time = now.getTime();
System.out.println(time); // 기계용 시간
System.out.println(now);
Thread.sleep(1000*2); // 2초 멈춤
Date DateSec2 = new Date();
System.out.println(DateSec2);
DateSec2.setTime(time); // 시간을 자유자재로 설정할 수 있음(mutable함)
System.out.println(DateSec2);
}
}
Date-Time
- Java8 부터는 다양한 날짜-시간 타입을 지원
- 불변 타입
- 확장성이 좋음
- 기계용 시간과 인류용 시간을 나눌 수 있음
기계용 시간 : EPOCK(1970년 1월 1일 0시 0분 0초) 부터 현재까지의 타입스탬프를 표현
인류용 시간 : 연, 월, 일, 시, 분, 초 로 표현 - LocalDate : 특정 날짜를 나타낼 때
LocalTime : 특정 시간을 나타낼 때
LocalDateTime : 특정 날짜와 시간을 나타낼 때 - 기간 표현 방법
Duration : 시간으로 표현
Period : 날짜로 표현
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class Example9 {
public static void main(String[] args) {
// 기계 시간으로 표현(현재 UTC(GMT) 반환)
Instant now = Instant.now();
System.out.println(now);
// 현재 시스템(서울)의 지역에 맞는 시간을 보여주도록
ZonedDateTime zonedDateTime = now.atZone(ZoneId.systemDefault());
System.out.println(zonedDateTime);
// 현재 시스템 지역의 시간을 가져옴
LocalDateTime now2 = LocalDateTime.now();
System.out.println(now2);
// LocalDateTime.of 를 이용해서 시간 설정이 가능하다.
LocalDateTime luckyDate =
LocalDateTime.of(2077, Month.JULY, 7, 7, 7, 7);
System.out.println(luckyDate);
// 날짜만 표시할 때는 LocalDate
LocalDate today = LocalDate.now();
LocalDate myBirthDay = LocalDate.of(1996, Month.DECEMBER, 25);
// Period.between 을 이용해서 두 날짜의 차이 확인
Period period = Period.between(myBirthDay, today);
System.out.println(period);
// LocalDate.until() 을 이용해서도 Period 를 표현 가능
Period period2 = today.until(myBirthDay);
System.out.println(period2);
// Duration
// 현재시간에 +10일
Instant instant2 = now.plus(10, ChronoUnit.HOURS);
Duration between = Duration.between(now, instant2);
System.out.println(between);
/**** Date Format ****/
// LocalDateTime 을 원하는 형식으로 표현
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
System.out.println(localDateTime.format(dateTimeFormatter));
// String 형식의 날짜를 LocalDate 로 변경 (LocalDateTime, LocalTime 도 가능)
LocalDate localDate = LocalDate.parse("1996.12.25", dateTimeFormatter);
System.out.println(localDate);
}
}
반응형
'BE > Java' 카테고리의 다른 글
[Java 8] Annotation, sort, Metaspace (0) | 2023.05.04 |
---|---|
[Java 8] Concurrent Programming (0) | 2023.04.29 |
[Java 8] Optional (0) | 2023.04.15 |
[Java 8] stream (0) | 2023.04.14 |
[Java 8] Default Method, Java 8의 NEW 기본 메서드 (0) | 2023.04.13 |